当我在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}
这是怎么回事? 如何解决?
答案 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()