2011-11-14 67 views
8

Tôi có một partner collection và tôi đang sử dụng pymongo để lấy dữ liệu
Khi tôi truy vấn các bộ sưu tập với MongoDB, tôi thấy sau kết quảpymongo tìm() vs MongoDB find(), pymongo tìm() cung cấp cho ít dữ liệu về tài liệu

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

Nhưng khi tôi truy vấn qua pymongo, đây là những gì tôi làm

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

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

cô e là những gì tôi nhìn thấy trong kết quả:

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

và tôi không nhận được tênprimary_key trong kết quả, tôi thiếu cái gì?

Cảm ơn bạn

Trả lời

12

Dường như khi bạn vượt qua từ điển rỗng (biến số criteria) của bạn làm tham số thứ hai có nghĩa là bạn không muốn trả về trường nào (ngoại trừ _id luôn được trả lại). Tham số thứ hai cho find() xác định các trường mà bạn muốn. Hãy thử đặt criteria=None hoặc không vượt qua tất cả criteria.

Link vào tài liệu pymongo cho find().

+0

câu trả lời hoàn hảo! – daydreamer

3

Điều này là do cách vỏ MongoDB dịch {} như một chọn lĩnh vực so với cách pymongo giải thích một từ điển rỗng. Về bản chất, vỏ bỏ qua đối tượng trống như một bộ chọn trường, trong khi pymongo giải thích nó là "không trả lại gì cả (ngoại trừ mặc định là _id)".

Bạn không cần chỉ định công cụ chọn trường khi sử dụng pymongo hoặc trình bao mongodb (bạn chỉ có thể để trống). Như vậy, tuyên bố này trong vỏ:

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

tương đương với:

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

(tuyên bố này sẽ làm việc trong cả vỏ và pymongo)

+0

cảm ơn bạn đã giải thích tuyệt vời – daydreamer

Các vấn đề liên quan