Mongodb 为什么pymongo评估结果与mongo shell不同?
当我在mongo shell中执行“db.abc.find()”时,它返回以下答案:Mongodb 为什么pymongo评估结果与mongo shell不同?,mongodb,pymongo,Mongodb,Pymongo,当我在mongo shell中执行“db.abc.find()”时,它返回以下答案: db.abc.find() { "_id" : ObjectId("56a942bfec926681f17f09b6"), "name" : "foo" } 但当我通过PyMongo的eval方法执行相同的命令时,我收到了不同的答案: >>> from pymongo import MongoClient >>> client = MongoClient() >&g
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}
这是怎么回事?
如何修复它?好吧,eval()
绝对是邪恶的
您应该将代码包装到函数中以使其工作:
from bson import Code
db.eval(Code('function () { return db.abc.find(); }'))
为什么不从Python中调用
db.abc.find()
,然后从游标获取文档呢
[doc for doc in db.abc.find()]
还是:
db.abc.find_one()
你为什么要这样做,你想用邪恶来获得什么?