pymongo中_get_collection()。find和objects()的结果之间的差异

时间:2014-11-26 07:52:10

标签: python mongodb pymongo

我正在使用pymongo来查询mongodb。我有一个名为 alph_var 的集合,此集合中的文档如下所示:{'a':'1','c':None,'d':'1sfa','e':None}

如果我正在做alph_var._get_collection().find({'a':'1'}),我会得到以下结果:

{'_id':ObjectId('1242as223'),'a':'1','d':'1sfa'}

当我正在做alph_var.objects(a='1')[0]._data时,我得到以下结果:

{'id':ObjectId('1242as223'), 'a':'1','c':None,'d':'1sfa','e':None}

我对pymongo完全不熟悉,知道为什么会这样吗?

1 个答案:

答案 0 :(得分:1)

我看到你在PyMongo周围使用MongoEngine,一个包装器("对象文档映射器")。当您调用_get_collection并获取底层PyMongo Collection实例的句柄并查询它时,您将获得MongoDB中BSON文档的原始表示,而无需进一步处理。显然,这个特定的文档只有字段" _id"," a"和" d"。它不包含字段" c"和" e"一点都不(MongoDB文档可以包含或省略任何字段,但" _id"。)

但是,当您使用MongoEngine时,它会对您的文档强制执行架构。我认为您已定义了字段" c"和" e"在您的MongoEngine架构中。因此,当MongoEngine检索文档时,它会发现文档缺少" c"和" e",所以它在内部" _data"中将它们设置为无。字典。