2011-11-22 13 views
149

मुझे यह प्रश्न सी # और पर्ल के लिए उत्तर दिया गया है, लेकिन मूल इंटरफ़ेस में नहीं। मुझे लगा कि यह काम करेगा:मैं ऑब्जेक्ट को अपने ऑब्जेक्ट आईडी द्वारा कंसोल में कैसे खोजूं?

db.theColl.find({ _id: ObjectId("4ecbe7f9e8c1c9092c000027") })

क्वेरी कोई परिणाम नहीं। मुझे db.theColl.find() करके और ऑब्जेक्ट आईडी को पकड़कर 4ecbe7f9e8c1c9092c000027 मिला। उस संग्रह में कई हजार वस्तुएं हैं।

मैंने उन सभी पृष्ठों को पढ़ा है जिन्हें मैं mongodb.org वेबसाइट पर पा सकता हूं और इसे नहीं मिला। क्या यह सिर्फ एक अजीब चीज है? यह मेरे लिए बहुत सामान्य लगता है।

उत्तर

235

बिलकुल अजीब नहीं, लोग हर समय ऐसा करते हैं। सुनिश्चित करें कि संग्रह का नाम सही है (केस मायने रखता है) और ऑब्जेक्टआईडी सटीक है।

प्रलेखन, here

> db.test.insert({x: 1}) 

> db.test.find()            // no criteria 
{ "_id" : ObjectId("4ecc05e55dd98a436ddcc47c"), "x" : 1 }  

> db.test.find({"_id" : ObjectId("4ecc05e55dd98a436ddcc47c")}) // explicit 
{ "_id" : ObjectId("4ecc05e55dd98a436ddcc47c"), "x" : 1 } 

> db.test.find(ObjectId("4ecc05e55dd98a436ddcc47c"))   // shortcut 
{ "_id" : ObjectId("4ecc05e55dd98a436ddcc47c"), "x" : 1 } 
+1

अजीब है, मैं अपने कंसोल को पुनः आरंभ और यह अचानक काम किया। क्या आपके "स्कोप" या कमांड लाइन पर कुछ बदलने का कोई तरीका है और वास्तव में इसे नहीं जानते? – jcollum

+0

कोई आश्चर्य नहीं कि: जब मैं 'ObjectID लगता है' के लिए खोज है कि पेज ऊपर नहीं आया था: http://www.mongodb.org/dosearchsite.action?queryString=find+ObjectId&where=DOCS – jcollum

+0

हाँ, अगर आप गलती से टाइप किया है हो सकता है " dbname का उपयोग करें "और स्विच किए गए डेटाबेस। मुझे लगता है कि आप प्रतिकृति या शेरिंग का उपयोग नहीं कर रहे हैं, जो स्पष्ट रूप से अन्य संभावनाएं पैदा करेगा कि यह क्यों नहीं दिख रहा था। –

56

भी आसान है विशेष रूप से टैब पूरा होने के साथ:

db.test.find(ObjectId('4ecc05e55dd98a436ddcc47c')) 

संपादित करें: भी खूबसूरत उत्पादन के लिए findOne कमांड के साथ काम करता है।

+0

अगर हम कई ऑब्जेक्ट आईडी के साथ खोजना चाहते हैं जैसे कि हम mysql में स्थिति में कहां लागू करते हैं। – Pratswinz

+0

यह मैं एक त्रुटि देता है: लेखन त्रुटि: फिल्टर dict, bson.son.SON, या अन्य प्रकार है कि –

+1

@DavidOkwii collections.Mapping से विरासत का एक उदाहरण होना चाहिए - इस उदाहरण MongoShell के लिए है। ऐसा लगता है कि आप पाइथन से चल रहे हैं, इस मामले में आप कुछ ऐसा करना चाहते हैं: 'db.test.find ({'_ id': ObjectId ('4ecc05e55dd98a436ddcc47c')} ' – MPlanchard

10

आप डबल कोट्स डालने से चूक गए हैं। सटीक क्वेरी

db.theColl.find({ "_id": ObjectId("4ecbe7f9e8c1c9092c000027") }) 
+0

" मुद्दा यह था कि मैं नहीं था मेरे _id के चारों ओर उद्धरण नहीं डाल रहा है। " - 7 दिसंबर 2011, पहले उत्तर – jcollum

+0

@jcollum पर टिप्पणियों को एक अपडेट के रूप में देखें, अब आपके द्वारा डाली गई क्वेरी _id के आसपास उद्धरण के बिना मान्य होगी। – AnimalTesting

43

आप उपयोग कर रहे हैं है Node.js:

> var ObjectId = require('mongodb').ObjectId; 
> var id = req.params.gonderi_id;  
> var o_id = new ObjectId(id); 
> db.test.find({_id:o_id}) 

संपादित करें: नया ObjectId (आईडी), नहीं नई ObjectID (आईडी)

+1

इस से पीड़ित है! टीएक्स –

-3

, बस करने के लिए सही किया :

db.getCollection('test').find('4ecbe7f9e8c1c9092c000027'); 
+0

यह मेरे लिए 'मोंगो शैल' संस्करण 3.2.7 से काम नहीं करता है। – zatziky

+0

वह केवल एक _ID से मेल खाता है जो एक स्ट्रिंग है; यदि यह एक वास्तविक ऑब्जेक्ट आईडी है, तो आपको ऑब्जेक्टआईड सिंटैक्स का उपयोग करके खोजना होगा। –

2

मैं सिर्फ इस मुद्दे था और वास्तव में क्या कर रहा था के रूप में प्रलेखित किया गया था और यह अभी भी काम नहीं कर रहा था। अपने त्रुटि संदेश में

देखो और सुनिश्चित करें कि आप में नकल पास कोई विशेष वर्ण नहीं करते हैं। मैं त्रुटि

SyntaxError: illegal character @(shell):1:43 

हो रही थी जब मैं चरित्र 43 यह सिर्फ मेरी आईडी वस्तु का आरम्भ था के पास गया, खुले उद्धरणों के बाद, जैसा कि मैंने इसे चिपकाया था। मैंने अपना कर्सर वहां रखा और बैकस्पेस को तब भी नहीं देखा जब इसे खुले उद्धरण को हटा दिया जाना चाहिए था। मैंने बैकस्पेस को फिर से मारा और इसे खुले उद्धरण को हटा दिया, फिर मैंने उद्धरण को वापस अंदर डाल दिया और क्वेरी निष्पादित की और यह ठीक उसी तरह देखने के बावजूद काम किया।

मैं वेबमैट्रिक्स में विकास कर रहा था और ऑब्जेक्ट आईडी को कंसोल से कॉपी किया था। जब भी आप वेबमैट्रिक्स में कंसोल से कॉपी करते हैं तो आपको कुछ अदृश्य वर्ण चुनने की संभावना है जो त्रुटियों का कारण बनेंगे।

3

एक बार जब आपने मोंगो सीएलआई खोला, तो सही डेटाबेस पर कनेक्ट और अधिकृत हो गया।

The following example shows how to find the document with the _id=568c28fffc4be30d44d0398e from a collection called “products”:

db.products.find({"_id": ObjectId("568c28fffc4be30d44d0398e")}) 
0

मुझे लगता है कि आप बेहतर कुछ इस तरह लिखना:

db.getCollection('Blog').find({"_id":ObjectId("58f6724e97990e9de4f17c23")}) 
+0

क्या आप थोड़ा सा समझा सकते हैं कि यह कोड प्रश्न का उत्तर कैसे देता है? –

0

विधि objectId उपयोग करने के लिए आप इसे आयात करने की आवश्यकता नहीं है। यह पहले से ही mongodb वस्तु पर है।

var ObjectId = new db.ObjectId('58c85d1b7932a14c7a0a320d'); 
 
db.yourCollection.findOne({ _id: ObjectId }, function (err, info) { 
 
    console.log(info) 
 
}); 
 
      

+1

नहीं: 'TypeError: db.ObjectId एक फ़ंक्शन नहीं है – jorisw

+0

यह केवल 'ऑब्जेक्ट आईडी (" कुछ ") है' – Andy

संबंधित मुद्दे