pymongo find () и mongodb find (), pymongo find () дает меньше данных о документе - PullRequest
10 голосов
/ 15 ноября 2011

У меня есть partner collection, и я использую pymongo для получения данных
Когда я запрашиваю коллекцию с помощью MongoDB , я вижу следующий результат

db.partner.find({'unique_key': 'c89dbe313932008febde61cdd2a071a1d'},{})
{ "_id" : ObjectId("4eb463cb158acb554e8c9c11"), "unique_key" : "c89dbe313932008febde61cdd2a071a1d", "name" : "ABC", "primary_key" : 12 }  

Но когда я запрашиваю через pymongo , вот что я делаю

for document in collection.find(find, criteria):
    print document  

where find = {'unique_key': 'c89dbe313932008febde61cdd2a071a1d'} and
      criteria = {}

Вот что я вижу в результате:

{u'_id': ObjectId('4eb463cb158acb554e8c9c11')}  

, а я нетполучить имя и primary_key в результате, я что-то упустил?

Спасибо

Ответы [ 2 ]

12 голосов
/ 15 ноября 2011

Кажется, что когда вы передаете пустой словарь (переменную criteria) в качестве второго параметра, это означает, что вы не хотите возвращать поля (кроме _id, который всегда возвращается). Второй параметр для find() определяет поля, которые вы хотите. Попробуйте установить criteria=None или вообще не пропускать criteria.

Ссылка на документ Pymongo для find().

4 голосов
/ 15 ноября 2011

Это связано с тем, что оболочка mongodb интерпретирует {} как селектор поля по сравнению с тем, как pymongo интерпретирует пустой словарь. По сути, оболочка игнорирует пустой объект как селектор поля, тогда как pymongo интерпретирует его как «ничего не возвращать (кроме значения по умолчанию _id)».

Вам не нужно указывать селектор поля при использовании pymongo или оболочки mongodb (вы можете просто оставить это поле пустым). Таким образом, это утверждение в оболочке:

db.partner.find({'unique_key': 'c89dbe313932008febde61cdd2a071a1d'},{})

эквивалентно:

db.partner.find({'unique_key': 'c89dbe313932008febde61cdd2a071a1d'})

(это утверждение будет работать как в оболочке, так и в pymongo)

...