Python Mongodb ドキュメントの検索
MongoDB では、find メソッドと find_one メソッドを使用してコレクション内のデータを検索します。これは SQL の SELECT 文に似ています。
この記事で使用するテストデータは次のとおりです。

1件のデータを検索
私たちは使用できますfind_one()メソッドでコレクション内の1件のデータを検索します。
検索sitesドキュメント内の最初のデータ:
例
出力結果は次のとおりです:
{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'サンプル', 'alexa': '10000', 'url': 'https://www.example.com'}
コレクション内のすべてのデータを検索
find()メソッドを使用すると、コレクション内のすべてのデータを検索でき、SQL のSELECT *操作に似ています。
次の例は検索しますsitesコレクション内のすべてのデータ:
例
出力結果は次のとおりです:
{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'サンプル', 'alexa': '10000', 'url': 'https://www.example.com'}
{'_id': ObjectId('5b2369cac315325f3698a1cf'), 'name': 'Google', 'alexa': '1', 'url': 'https://www.google.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb6'), 'name': 'Taobao', 'alexa': '100', 'url': 'https://www.taobao.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb7'), 'name': 'QQ', 'alexa': '101', 'url': 'https://www.qq.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb8'), 'name': 'Facebook', 'alexa': '10', 'url': 'https://www.facebook.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb9'), 'name': '知乎', 'alexa': '103', 'url': 'https://www.zhihu.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbba'), 'name': 'Github', 'alexa': '109', 'url': 'https://www.github.com'}
指定フィールドのデータを検索
find() メソッドを使用して、指定フィールドのデータを検索できます。返すフィールドの対応する値を 1 に設定します。
例
出力結果は次のとおりです:
{'name': 'サンプル', 'alexa': '10000'}
{'name': 'Google', 'alexa': '1'}
{'name': 'Taobao', 'alexa': '100'}
{'name': 'QQ', 'alexa': '101'}
{'name': 'Facebook', 'alexa': '10'}
{'name': '知乎', 'alexa': '103'}
{'name': 'Github', 'alexa': '109'}
_id を除き、1 つのオブジェクト内で 0 と 1 を同時に指定することはできません。あるフィールドを 0 に設定した場合、他のフィールドはすべて 1 になり、逆も同様です。
次の例では、alexa フィールド以外をすべて返します:
例
出力結果は次のとおりです:
{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'サンプル', 'url': 'https://www.example.com'}
{'_id': ObjectId('5b2369cac315325f3698a1cf'), 'name': 'Google', 'url': 'https://www.google.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb6'), 'name': 'Taobao', 'url': 'https://www.taobao.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb7'), 'name': 'QQ', 'url': 'https://www.qq.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb8'), 'name': 'Facebook', 'url': 'https://www.facebook.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb9'), 'name': '知乎', 'url': 'https://www.zhihu.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbba'), 'name': 'Github', 'url': 'https://www.github.com'}
次のコードでは、0 と 1 を同時に指定するとエラーが発生します。:
例
エラー内容はおおよそ次のとおりです:
... pymongo.errors.OperationFailure: Projection cannot have a mix of inclusion and exclusion. ...
指定した条件で検索
私たちはfind()の中でパラメータを設定してデータをフィルタリングできます。
次の例では、name フィールドが「サンプル」のデータを検索します:
例
出力結果は次のとおりです:
{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'サンプル', 'alexa': '10000', 'url': 'https://www.example.com'}
高度な検索
検索の条件文では、修飾子を使用することもできます。
次の例では、name フィールドの最初の文字の ASCII 値が「H」より大きいデータを読み取ります。大なり修飾子の条件は{"$gt": "H"} :
例
出力結果は次のとおりです:
{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'サンプル', 'alexa': '10000', 'url': 'https://www.example.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb6'), 'name': 'Taobao', 'alexa': '100', 'url': 'https://www.taobao.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb7'), 'name': 'QQ', 'alexa': '101', 'url': 'https://www.qq.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb9'), 'name': '知乎', 'alexa': '103', 'url': 'https://www.zhihu.com'}
正規表現を使用した検索
修飾子として正規表現を使用することもできます。
正規表現の修飾子は、文字列フィールドの検索にのみ使用されます。
次の例では、name フィールドの最初の文字が「R」であるデータを読み取ります。正規表現修飾子の条件は{"$regex": "^R"} :
例
出力結果は次のとおりです:
{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'サンプル', 'alexa': '10000', 'url': 'https://www.example.com'}
指定した件数のレコードを返す
クエリ結果に指定した件数のレコードを設定する場合は、limit()メソッドを使用できます。このメソッドは数値パラメータを 1 つだけ受け入れます。
次の例では、3 件のドキュメントレコードを返します:
例
出力結果は次のとおりです:
{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'サンプル', 'alexa': '10000', 'url': 'https://www.example.com'}
{'_id': ObjectId('5b2369cac315325f3698a1cf'), 'name': 'Google', 'alexa': '1', 'url': 'https://www.google.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb6'), 'name': 'Taobao', 'alexa': '100', 'url': 'https://www.taobao.com'}
その他の拡張
Python Mongodb