2011-11-14 41 views
8

較少的數據我有partner collection,我使用pymongo當我查詢集合與MongoDB的檢索數據
,我看到了結果如下pymongo找到()對MongoDB的find()方法,pymongo找到()給出了有關文檔

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 = {} 

她e是我在結果看:

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

,我沒有得到和結果primary_key,我失去的東西嗎?

謝謝

回答

12

看來,當你通過空字典(你的criteria變量)作爲第二個參數,這意味着你不想返回任何字段(總是返回的_id除外)。 find()的第二個參數定義了您需要的字段。嘗試設置criteria=None或根本不通過criteria

Linkfind()的pymongo文檔。

+0

完美的答案! – daydreamer

3

這是因爲MongoDB的shell如何解釋{}作爲一個字段選擇與pymongo如何解釋一個空的字典。實際上,shell將空對象忽略爲字段選擇器,而pymongo則將其解釋爲「不返回任何內容(默認值爲_id)」。

當使用pymongo或mongodb shell時,您不需要指定字段選擇器(您可以將其保留爲空)。因此,在shell這樣的說法:

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

等同於:

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

(這個聲明將在外殼和pymongo都工作)

+0

謝謝精彩的解釋 – daydreamer