MongoDB का चयन करें जहां _id की सरणी में है?


93

SQL में जैसे संग्रह के दस्तावेजों का चयन करने के लिए mongo db में संभव है:

SELECT * FROM collection WHERE _id IN (1,2,3,4);

या अगर मेरे पास एक है तो मुझे एक- _id arrayएक करके चयन करना चाहिए और फिर array/objectपरिणामों का पुन: प्रस्ताव करना चाहिए ?

जवाबों:


167

आसान :)

db.collection.find( { _id : { $in : [1,2,3,4] } } );

इससे लिया गया: http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24in


क्या हमें अभी भी अनुक्रमण के लाभ मिलते हैं? उस मामले में आईडी को सादे तार के रूप में पारित किया जाता है ...
रफाल पास्तुज़क

2
तुम करो। हालाँकि समय जटिलता रैखिक (n) है, लघुगणक / स्थिर नहीं। सूचकांक के बिना यह n ^ 2 होगा।
पेट्र ब्रिजिल

क्या यह नहीं है कि संग्रह का आकार O(log(n) * m)कहां nहै और mआईडी की संख्या कितनी है?
गुइग

8
यू, ObjectId समारोह उपयोग करना चाहते हैं "_ id" आईडी वस्तु है - {_ id: {$ में: [ObjectId ( "5a633609670aeb6f93b88b23")]}}
पैक्स समुद्र तट

7

सूची आईडी की एक सरणी है

इस कोड की सूची में उपयोगकर्ता संग्रह में आईडी की सरणी है

var list = ["5883d387971bb840b7399130","5883d389971bb840b7399131","5883d38a971bb840b7399132"]

    .find({ _id: {$in : list}})

4
कोड काम नहीं कर रहा है। ऐसा लगता है कि IDI को ObjectId के रूप में सेट करना है ("5883d387971bb840b7399130")
पैक्स बीच

2

क्योंकि मैंगोडब का उपयोग किया जाता है bsonऔर बॉन के लिए यह महत्वपूर्ण विशेषता प्रकार है। और क्योंकि _idहै ObjectIdआप इस तरह का उपयोग करना चाहिए:

db.collection.find( { _id : { $in : [ObjectId('1'),ObjectId('2')] } } );

और mongodb compassइस तरह से उपयोग करें:

{ "_id" : { $in : [ObjectId('1'),ObjectId('2')] } }

नोट: string में objectId की 24लंबाई होती है।


2

यदि आप उपयोगकर्ता और किसी अन्य क्षेत्र जैसे सशर्त रूप से खोजना चाहते हैं, तो आप इसे आसानी से प्रसार और टर्न ऑपरेटर के साथ कर सकते हैं aggregateऔरmatch

 const p_id = patient_id;
    let fetchingReports = await Reports.aggregate([
      ...(p_id
        ? [
            {
              $match: {
                createdBy: mongoose.Types.ObjectId(id),
                patient_id: p_id,
              },
            },
          ]
        : [
            {
              $match: {
                createdBy: mongoose.Types.ObjectId(id),
              },
            },
        

-3

यह मोंगो क्वेरी से संबंधित नहीं है। मैं SQL से परिचित था और SQL का उपयोग करके एक mongo डेटाबेस को क्वेरी करने के लिए Studio3T IDE का उपयोग करता था। यदि आप मेरी तरह एक हैं, तो मैं बताना चाहता हूं कि आईडी वैल्यू को टाइपकास्ट किया जाना चाहिए। तो क्वेरी की तरह दिखेगा:

SELECT _id from <collectionName>
WHERE _id = ObjectId("5883d387971bb840b7399130");

2
यह प्रश्न को बिल्कुल भी संबोधित नहीं करता है।
अक्टूबर

जवाब नहीं देती, मान गई। यह कुछ IDE जैसे Studio3T के साथ मदद कर सकता है, जो आपको SQL का उपयोग करके mongoDB के साथ बातचीत करने देते हैं। वहां जवाब का आवेदन है। इसके अलावा, यह उजागर करना है कि उस मामले में भी _id टाइप करना होगा।
सूर्याभक्सी

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