2011-11-14 14 views
8

私はpartner collectionを持っていると私はデータ
の を取得するためにpymongoを使用しています私はのMongoDBでコレクションを照会するとき、私は以下の結果を参照してくださいpymongo find()とmongodb find()とpymongo find()は、ドキュメントに関するデータ量が少ない

db.partner.find({'unique_key': 'c89dbe313932008febde61cdd2a071a1d'},{}) 
{ "_id" : ObjectId("4eb463cb158acb554e8c9c11"), "unique_key" : "c89dbe313932008febde61cdd2a071a1d", "name" : "ABC", "primary_key" : 12 } 

しかし、私は pymongo経由で照会すると、ここに何があります私は結果に何を見ている

for document in collection.find(find, criteria): 
    print document 

where find = {'unique_key': 'c89dbe313932008febde61cdd2a071a1d'} and 
     criteria = {} 

ここでください:

{u'_id': ObjectId('4eb463cb158acb554e8c9c11')} 

と私は結果に名前 PRIMARY_KEYを得ることはありません、私は何かが足りないのですか?

ありがとう

答えて

12

は、あなたが空の辞書を渡すときと思われます(criteria変数)を2番目のパラメータとして使用すると、フィールドが返されないようになります(_idは常に返されます)。 find()の2番目のパラメータは、必要なフィールドを定義します。 criteria=Noneに設定するか、criteriaをまったく渡さないでください。

Linkfind()のpymongoドキュメント。

+0

完璧な答え! – daydreamer

3

ありがとうございます。本質的に、シェルは空のオブジェクトをフィールドセレクタとして無視しますが、pymongoはそのオブジェクトを「何も返しません(デフォルトは_id以外)」と解釈します。

pymongoまたはmongodbシェルを使用するときにフィールドセレクタを指定する必要はありません(空白のままにしておきます)。したがって、このシェル内のステートメント:

db.partner.find({'unique_key': 'c89dbe313932008febde61cdd2a071a1d'},{}) 

は同等です:

db.partner.find({'unique_key': 'c89dbe313932008febde61cdd2a071a1d'}) 

(この文はシェルとpymongoの両方で動作します)

+0

すてきな説明ありがとう – daydreamer