2011-10-21 5 views
21

मैं पिमोंगो ड्राइवर का उपयोग कर रहा हूं। माना जाता है, एक एक दस्तावेज़ के _ id क्षेत्र क्वेरी करने के लिए, इस तरह की एक स्ट्रिंग का उपयोग कर सकते हैं:पाइथन का उपयोग करके स्ट्रिंग का उपयोग करके _id के लिए MongoDB से पूछताछ करने का सही तरीका क्या है?

thing = db.things.find_one({'_id':'4ea113d6b684853c8e000001'}) 

लेकिन यह काम नहीं करता। मैं क्या गलत कर रहा हूं?

उत्तर

36

यह होना चाहिए:

from pymongo.objectid import ObjectId 
thing = db.things.find_one({'_id': ObjectId('4ea113d6b684853c8e000001') }) 

संपादित करें: वर्तमान आयात है: from bson.objectid import ObjectId

+0

था आह आयात सभी फर्क पड़ता है, धन्यवाद! – MFB

+0

pymongo के लिए> 2.2 कृपया https://stackoverflow.com/a/10919658/6613450 –

0

thing = db.things.find_one({'_id':ObjectId('4ea113d6b684853c8e000001')}) काम करना चाहिए

+0

धन्यवाद में मुद्रित करने के लिए, स्टोर नहीं करना चाहती आपका जवाब भी सही है, लेकिन यह आयात मैं याद आ रही थी, चियर्स – MFB

23

PyMongo इसकी संरचना बदल गया है। ObjectID अब pymongo से आयात नहीं किया गया है, लेकिन bson से। अब यह होना चाहिए:

from bson.objectid import ObjectId 
thing = db.things.find_one({'_id': ObjectId('4ea113d6b684853c8e000001')}) 

आपको बता दें कि pypi/pymongo प्रति, "bson" पैकेज स्थापित नहीं है। PyMongo अपने स्वयं के बीएसओ पैकेज के साथ आता है; "पीआईपी इंस्टॉल बीएसएन" करना एक तीसरे पक्ष के पैकेज को स्थापित करता है जो PyMongo के साथ असंगत है।

+0

देखें http://stackoverflow.com/questions/10401499/mongokit-importerror-no-module-named-objectid-error – Sean

0

PyMongo दस्तावेज़ वर्तमान संस्करण के साथ सिंक में प्रतीत नहीं होता है। ऑब्जेक्ट आईडी अब bson.objectid नेमस्पेस के अंतर्गत हैं। अगर मुझे सही याद है, तो वे संस्करण 2.3 के बाद से इस तरह से रहे हैं। bson.objectid आयात ऑब्जेक्टआईडी से उपयोग करें।

1

इसे प्रिंट करने के लिए:

import pymongo 
from bson.objectid import ObjectId  
print(db.things.find_one({'_id': ObjectId('4ea113d6b684853c8e000001')})) 

lobster1234 यदि आप अन्य चर