2016-01-28 3 views
1

Когда я выполняю «db.abc.find()» в Монго оболочки возвращает следующий ответ:Почему pymongo eval отличается от mongo shell?

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

Но когда я выполнить ту же команду с помощью метода Eval PyMongo, я получить другой ответ:

>>> 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

почему вы это делаете, что вы хотите для того чтобы достигнуть с Eval() Злом? – sergiuz

ответ

1

Ну, eval() определенно злой и является actually deprecated.

Вы должны обернуть код в функцию, чтобы заставить его работать:

from bson import Code 

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

Почему вы просто не позвонить db.abc.find() из Python и вы получите документ (ы) с курсором?

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

Или еще:

db.abc.find_one() 
Смежные вопросы