मैं अपने ऑब्जेक्ट द्वारा mongo कंसोल में ऑब्जेक्ट कैसे खोजूं?


265

मैंने इस प्रश्न को C # और पर्ल के लिए उत्तर दिया है, लेकिन देशी इंटरफ़ेस में नहीं। मैंने सोचा कि यह काम करेगा:

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

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

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

जवाबों:


416

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

प्रलेखन यहाँ है

> 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
अजीब बात है, मैंने अपना कंसोल पुनः आरंभ किया और यह अचानक काम कर गया। क्या कमांड लाइन पर अपना "स्कोप" या कुछ बदलने का कोई तरीका है और वास्तव में यह नहीं पता है?
जुल्म

कोई आश्चर्य नहीं: जब मैंने 'ऑब्जेक्ट खोजें' के लिए खोज की तो वह पृष्ठ सामने नहीं आया: mongodb.org/…
jcollum

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

1
मुद्दा यह था कि मैं अपने _id के आसपास उद्धरण नहीं दे रहा था।
जुल्म

9
वाह, मुझे नहीं पता था कि यह कुछ विशेष था MongoDB में कुछ समय बर्बाद करने के लिए सोच रहा था कि मेरी समस्या कहीं और थी, लेकिन इसे खोजने के लिए अतिरिक्त नियमों की आवश्यकता थी। एक्सप्रेस और नोड का उपयोग करने वाले लोगों के लिए यह आवश्यक है कि ऑब्जेक्ट ऑब्जेक्टिव की आवश्यकता हो ... var ObjectId = आवश्यकता ('mongbb')। ObjectID;
क्रिस हॉक्स

87

यदि आप 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})

संपादित करें: नई ऑब्जेक्ट आईडी (आईडी) के लिए सही, नई ऑब्जेक्ट (आईडी) नहीं


5
import { ObjectId } from "mongodb";कट्टर जेएस के लिए काम करता है।
नेटऑपरेटर विब्बी

84

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

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

संपादित करें: findOneप्रीटियर आउटपुट के लिए कमांड के साथ भी काम करता है ।


अगर हम कई वस्तु Ids के साथ खोज करना चाहते हैं, ठीक उसी तरह जैसे हम mysql में WHERE IN कंडीशन लागू करते हैं।
प्रतिसांझ

यह मुझे एक त्रुटि देता है: TypeError: फ़िल्टर होना चाहिए उदाहरण के लिए एक प्रकार का, bson.son.SON, या अन्य प्रकार जो कि संग्रह से विरासत में मिला है।
मैपिंग

1
@DavidOkwii - यह उदाहरण MongoShell के लिए है। ऐसा लगता है कि आप पायथन से भाग रहे हैं, जिस स्थिति में आप कुछ करना चाहते हैं:db.test.find({'_id': ObjectId('4ecc05e55dd98a436ddcc47c')})
एमपीलांचर

यह गलत है, db.test.findOneAndDelete(ObjectId('57eujhs76e7hs877e868'))कमांड में इस दृष्टिकोण का उपयोग करने से डॉक्यूमेंट डिलीट हो जाएगा भले ही ObjectId निर्दिष्ट आईडी से मेल न खाता हो। आपको ठीक इसी तरह निर्दिष्ट करने की आवश्यकता हैdb.test.find({'_id': ObjectId('4ecc05e55dd98a436ddcc47c')})
डैनी सोफ़्टी

1
यह सवाल था find(), के बारे में नहीं findOneAndDelete()
MPlanchard

18

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

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

"मुद्दा यह था कि मैं अपने _id के आसपास उद्धरण नहीं दे रहा था।" - 7 दिसंबर 2011, पहले जवाब पर टिप्पणियाँ देखें
jcollum

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

4

यदि आप मोंगो शेल पर काम कर रहे हैं, तो कृपया इसे देखें: टायलर ब्रॉक का उत्तर

मैंने उत्तर लिखा था यदि आप नोड.जेएस का उपयोग करके मोंगोडब का उपयोग कर रहे हैं

आपको आईडी को एक में बदलने की आवश्यकता नहीं है ObjectId। महज प्रयोग करें :

db.collection.findById('4ecbe7f9e8c1c9092c000027');

यह संग्रह विधि स्वचालित रूप से आईडी को ऑब्जेक्टआईड में परिवर्तित कर देगी।

दूसरी ओर :

db.collection.findOne({"_id":'4ecbe7f9e8c1c9092c000027'})अपेक्षा के अनुरूप काम नहीं करता है। आपने मैन्युअल रूप से id में बदल दिया है ObjectId

इस तरह किया जा सकता है:

let id = '58c85d1b7932a14c7a0a320d';

let o_id = new ObjectId(id);   // id as a string is passed

db.collection.findOne({"_id":o_id});

findById एक फ़ंक्शन / विधि होना चाहिए जिसमें mongoose - जहाँ यह आंतरिक रूप से string को ObjectId में परिवर्तित करता है, जब तक कि आप mongoose का उपयोग नहीं करते हैं यह कोड आपकी मदद नहीं करता है चाहे वह नोड हो या अन्य .. !!
हूमी

1
हाँ..मैं यह बताना भूल गया कि मानस की आवश्यकता है ..... सुधार के लिए धन्यवाद
saurabh gupta

3

मेरे पास बस यह मुद्दा था और बिल्कुल वैसा ही कर रहा था जैसा कि प्रलेखित था और यह अभी भी काम नहीं कर रहा था।

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

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

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

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


3

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

निम्नलिखित उदाहरण से पता चलता है कि "उत्पादों" नामक संग्रह से _id = 568c28fffc4be30d44d0398e दस्तावेज़ को कैसे खोजना है :

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

2

MongoDB सिलाई कार्यों में इसे नीचे की तरह BSON का उपयोग करके किया जा सकता है :

ObjectIdइस उद्देश्य के लिए BSON उपयोगिता पैकेज में सहायक का उपयोग करें जैसे कि follwing उदाहरण में:

var id = "5bb9e9f84186b222c8901149";  
BSON.ObjectId(id);

1

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

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

क्या आप थोड़ा समझा सकते हैं कि यह कोड प्रश्न का उत्तर कैसे देता है?
20á'íṅḡ Ⱬỏḿƀíé

-1

ऑब्जेक्ट विधि का उपयोग करने के लिए आपको इसे आयात करने की आवश्यकता नहीं है। यह पहले से ही मोंगोडब ऑब्जेक्ट पर है।

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


1
TypeError: db.ObjectId is not a function
नोप

यह सिर्फObjectId("SOMETHING")
बेन सिनक्लेयर

-1

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

उस req.user में ObjectId प्रारूप है।

var mongoose = require("mongoose");
var ObjectId = mongoose.Schema.Types.ObjectId;

function getUsers(req, res)
    User.findOne({"_id":req.user}, { password: 0 }) 
         .then(data => { 
             res.send(data);})g
}
exports.getUsers = getUsers;

-5

बस करो:

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

यह मेरे लिए Mongo Shell3.2.7 वर्जन से काम नहीं करता है ।
Amio.io

1
यह केवल एक _id से मेल खाएगा जो एक स्ट्रिंग है; यदि यह एक सही ObjectId है, तो आपको ObjectId सिंटैक्स का उपयोग करके खोज करने की आवश्यकता है।
विंस बॉड्रेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.