【问题标题】:Why pymongo eval result is different from mongo shell?为什么 pymongo eval 结果与 mongo shell 不同?
【发布时间】:2016-01-29 08:59:34
【问题描述】:

当我在 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}

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

【问题讨论】:

  • 你为什么要这样做,你想用 eval() 达到什么目的?

标签: mongodb pymongo


【解决方案1】:

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

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

from bson import Code

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

【讨论】:

    【解决方案2】:

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

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

    还是:

    db.abc.find_one()
    

    【讨论】:

      猜你喜欢
      • 2015-10-25
      • 2013-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-15
      • 1970-01-01
      • 1970-01-01
      • 2015-05-07
      相关资源
      最近更新 更多