Python Mongodb ドキュメントの検索

Python Mongodb Python Mongodb

MongoDB では、find メソッドと find_one メソッドを使用してコレクション内のデータを検索します。これは SQL の SELECT 文に似ています。

この記事で使用するテストデータは次のとおりです。

1件のデータを検索

私たちは使用できますfind_one()メソッドでコレクション内の1件のデータを検索します。

検索sitesドキュメント内の最初のデータ:

例

#!/usr/bin/python3 import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["サンプルdb"] mycol = mydb["sites"] x = mycol.find_one() print(x)

出力結果は次のとおりです:

{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'サンプル', 'alexa': '10000', 'url': 'https://www.example.com'}

コレクション内のすべてのデータを検索

find()メソッドを使用すると、コレクション内のすべてのデータを検索でき、SQL のSELECT *操作に似ています。

次の例は検索しますsitesコレクション内のすべてのデータ:

例

#!/usr/bin/python3 import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["サンプルdb"] mycol = mydb["sites"] for x in mycol.find(): print(x)

出力結果は次のとおりです:

{'_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 に設定します。

例

#!/usr/bin/python3 import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["サンプルdb"] mycol = mydb["sites"] for x in mycol.find({},{ "_id": 0, "name": 1, "alexa": 1 }): print(x)

出力結果は次のとおりです:

{'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 フィールド以外をすべて返します:

例

#!/usr/bin/python3 import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["サンプルdb"] mycol = mydb["sites"] for x in mycol.find({},{ "alexa": 0 }): print(x)

出力結果は次のとおりです:

{'_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 を同時に指定するとエラーが発生します。:

例

#!/usr/bin/python3 import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["サンプルdb"] mycol = mydb["sites"] for x in mycol.find({},{ "name": 1, "alexa": 0 }): print(x)

エラー内容はおおよそ次のとおりです:

...
pymongo.errors.OperationFailure: Projection cannot have a mix of inclusion and exclusion.
...

指定した条件で検索

私たちはfind()の中でパラメータを設定してデータをフィルタリングできます。

次の例では、name フィールドが「サンプル」のデータを検索します:

例

#!/usr/bin/python3 import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["サンプルdb"] mycol = mydb["sites"] myquery = { "name": "サンプル" } mydoc = mycol.find(myquery) for x in mydoc: print(x)

出力結果は次のとおりです:

{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'サンプル', 'alexa': '10000', 'url': 'https://www.example.com'}

高度な検索

検索の条件文では、修飾子を使用することもできます。

次の例では、name フィールドの最初の文字の ASCII 値が「H」より大きいデータを読み取ります。大なり修飾子の条件は{"$gt": "H"} :

例

#!/usr/bin/python3 import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["サンプルdb"] mycol = mydb["sites"] myquery = { "name": { "$gt": "H" } } mydoc = mycol.find(myquery) for x in mydoc: print(x)

出力結果は次のとおりです:

{'_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"} :

例

#!/usr/bin/python3 import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["サンプルdb"] mycol = mydb["sites"] myquery = { "name": { "$regex": "^R" } } mydoc = mycol.find(myquery) for x in mydoc: print(x)

出力結果は次のとおりです:

{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'サンプル', 'alexa': '10000', 'url': 'https://www.example.com'}

指定した件数のレコードを返す

クエリ結果に指定した件数のレコードを設定する場合は、limit()メソッドを使用できます。このメソッドは数値パラメータを 1 つだけ受け入れます。

次の例では、3 件のドキュメントレコードを返します:

例

import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["サンプルdb"] mycol = mydb["sites"] myresult = mycol.find().limit(3) # 出力結果 for x in myresult: print(x)

出力結果は次のとおりです:

{'_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 Python Mongodb

その他の拡張