pymongo find()vs mongodb find(),pymongo find()提供的文档数据较少

时间:2011-11-14 21:20:21

标签: mongodb pymongo

我有一个partner collection我正在使用pymongo来检索数据 当我使用 MongoDB 查询集合时,我看到以下结果

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 ,我错过了什么吗?

谢谢

2 个答案:

答案 0 :(得分:12)

当您将空字典(您的criteria变量)作为第二个参数传递时,它似乎意味着您不希望返回任何字段(除了始终返回的_id除外)。 find()的第二个参数定义了您想要的字段。尝试设置criteria=None或者根本不设置criteria

Linkfind()的pymongo文档。

答案 1 :(得分:4)

这是由于mongodb shell如何将{}解释为字段选择器与pymongo如何解释空字典。本质上,shell将空对象忽略为字段选择器,而pymongo将其解释为“不返回任何内容(默认值为_id)”。

使用pymongo或mongodb shell时,您不需要指定字段选择器(您可以将其留空)。因此,shell中的这个语句:

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

相当于:

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

(此语句适用于shell和pymongo)