为什么pymongo eval结果与mongo shell不同?

时间:2016-01-28 21:28:12

标签: mongodb pymongo

当我在mongo shell中执行“db.abc.find()”时,它会返回以下答案:

 db.abc.find()
{ "_id" : ObjectId("56a942bfec926681f17f09b6"), "name" : "foo" }

但是当我通过PyMongo的eval方法执行相同的命令时,我得到了一个不同的答案:

>>> from pymongo import MongoClient
>>> client = MongoClient()
>>> db = client.test
>>> db.eval('db.abc.find()')
{u'_special': False, u'_options': 0.0, u'_ns': u'test.abc', u'_db': {u'_mongo': {u'slaveOk': False, u'host': u'EMBEDDED'}, u'_name': u'test'}, u'_skip': 0.0, u'_numReturned': 0.0, u'_query': {}, u'_limit': 0.0, u'_mongo': {u'slaveOk': False, u'host': u'EMBEDDED'}, u'_collection': {u'_shortName': u'abc', u'_db': {u'_mongo': {u'slaveOk': False, u'host': u'EMBEDDED'}, u'_name': u'test'}, u'_mongo': {u'slaveOk': False, u'host': u'EMBEDDED'}, u'_fullName': u'test.abc'}, u'_cursor': None, u'_fields': None, u'_batchSize': 0.0}

这是怎么回事? 如何解决?

2 个答案:

答案 0 :(得分:1)

嗯,eval()绝对是邪恶的,actually deprecated

您应该将代码包装到函数中以使其工作:

from bson import Code

db.eval(Code('function () { return db.abc.find(); }'))

答案 1 :(得分:0)

为什么不直接从Python调用db.abc.find()并从光标中获取文档?

[doc for doc in db.abc.find()]

或者仍然:

db.abc.find_one()