MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

mongodb को क्वेरी खोजने में स्ट्रिंग के रूप में _id मिलता है

MongoDB 4.0 $convert जोड़ता है एग्रीगेशन ऑपरेटर और $toString उपनाम जो आपको ठीक वैसा ही करने की अनुमति देता है:

db.getCollection('example').aggregate([
  { "$match": { "example":1 } },
  { "$project": { "_id": { "$toString": "$_id" } } }
])

हालांकि इसका मुख्य उपयोग _id . का उपयोग करने की सबसे अधिक संभावना होगी किसी दस्तावेज़ में "कुंजी" के रूप में मान।

db.getCollection('example').insertOne({ "a": 1, "b": 2 })

db.getCollection('example').aggregate([
  { "$replaceRoot": {
    "newRoot": {
      "$arrayToObject": [
        [{ 
          "k": { "$toString": "$_id" },
          "v": {
            "$arrayToObject": {
              "$filter": {
                "input": { "$objectToArray": "$$ROOT" },
                "cond": { "$ne": ["$$this.k", "_id"] }
              }
            }
          }
        }] 
      ]
    }
  }}
])

जो वापस आएगा:

{ 
  "5b06973e7f859c325db150fd" : { "a" : 1, "b" : 2 }
}

जो दूसरे उदाहरण की तरह स्ट्रिंग को स्पष्ट रूप से दिखाता है।

आम तौर पर हालांकि कर्सर पर "रूपांतरण" करने का एक तरीका होता है क्योंकि सर्वर से दस्तावेज़ वापस कर दिए जाते हैं। यह आमतौर पर एक अच्छी बात है क्योंकि ObjectId एक 24 वर्ण हेक्स "स्ट्रिंग" के विपरीत एक 12-बाइट बाइनरी प्रतिनिधित्व है जो बहुत अधिक स्थान लेता है।

शेल में एक .map() होता है विधि

db.getCollection('example').find().map(d => Object.assign(d, { _id: d._id.valueOf() }) )

और NodeJS में एक Cursor.map() है जो एक ही काम बहुत कुछ कर सकता है:

let cursor = db.collection('example').find()
    .map(( _id, ...d }) => ({ _id: _id.toString(), ...d }));

while ( await cursor.hasNext() ) {
  let doc = cursor.next();
  // do something
})

और यही तरीका अन्य ड्राइवरों में भी मौजूद है (सिर्फ PHP नहीं), या आप केवल कर्सर को पुनरावृत्त कर सकते हैं और सामग्री को रूपांतरित कर सकते हैं जैसा कि करने के लिए सबसे अच्छी बात है।

वास्तव में, शेल में काम करते समय किसी भी कर्सर रिटर्निंग स्टेटमेंट को जोड़कर पूरे कर्सर परिणामों को बड़ी आसानी से एक ही ऑब्जेक्ट में कम किया जा सकता है

.toArray().reduce((o,e) => { 
  var _id = e._id;
  delete e._id;
  return Object.assign(o, { [_id]: e })
},{ })

या पूर्ण ES6 जावास्क्रिप्ट समर्थित वातावरण जैसे नोडज के लिए:

.toArray().reduce((o,({ _id, ...e })) =>  ({ ...o, [_id]: e }),{ })

एकत्रीकरण ढांचे में क्या संसाधित करने की आवश्यकता की जटिलता के बिना वास्तव में सरल सामान। और किसी भी भाषा में एक ही माध्यम से बहुत संभव है।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. मोंगोडब और एमएएमपी

  2. मोंगोडीबी डिलीटऑन ()

  3. $unionWith - MongoDB के UNION ALL . के बराबर

  4. उल्का मोंगो अद्यतन नेस्टेड सरणी

  5. Windows 7 मशीन पर MongoDB:कोई कनेक्शन नहीं बनाया जा सका