web-dev-qa-db-ja.com

Pythonを使用して文字列を使用し、MongoDBに_idを照会する正しい方法は何ですか?

Pymongoドライバーを使用しています。おそらく、次のように文字列を使用してドキュメントの_idフィールドをクエリできます。

thing = db.things.find_one({'_id':'4ea113d6b684853c8e000001'})

しかし、それは機能しません。何が悪いのですか?

28
MFB

そのはず :

from pymongo.objectid import ObjectId   
thing = db.things.find_one({'_id': ObjectId('4ea113d6b684853c8e000001') })

編集:現在のインポートは次のとおりです:from bson.objectid import ObjectId

46
DhruvPathak

PyMongoはその構造を変更しました。 ObjectIDpymongoではなくbsonからインポートされます。これで次のようになります。

from bson.objectid import ObjectId
thing = db.things.find_one({'_id': ObjectId('4ea113d6b684853c8e000001')})

pypi/pymongo に従って、「bson」パッケージをインストールしないでください。 PyMongoには独自のbsonパッケージが付属しています。 「pip install bson」を実行すると、PyMongoと互換性のないサードパーティパッケージがインストールされます。

31
Sean

印刷するには:

import pymongo
from bson.objectid import ObjectId    
print(db.things.find_one({'_id': ObjectId('4ea113d6b684853c8e000001')}))

印刷したくない場合は、他の変数に保存します

2
Jigyasu Tailor

PyMongoのドキュメントが現在のバージョンと同期していないようです。 ObjectIdは、bson.objectid名前空間の下にあります。私の記憶が正しければ、バージョン2.3以降はそうです。 bson.objectid import ObjectIdから使用します。

0
Karthik Gomadam

thing = db.things.find_one({'_id':ObjectId('4ea113d6b684853c8e000001')})は機能するはずです

0
lobster1234