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

Mongodb . में एकत्रीकरण पाइपलाइन का उपयोग करके सुधार संग्रह

यदि metadata . में तत्वों की स्थिति फ़ील्ड और एम्बेडेड दस्तावेज़ों की कुंजी ज्ञात है और फिर आप एकत्रीकरण का उपयोग कर सकते हैं।

db.foo.aggregate([
  {
    $project : {
      data : {
        "Language" : {
          $arrayElemAt : ["$metadata", 0]
        },
        "City" : {
          $arrayElemAt : ["$metadata", 1]
        },
        "Gender" : {
          $arrayElemAt : ["$metadata", 2]
        }
      }
    }
  },
  {
    $project : {
      metadata : {
        Language : "$data.Language.value",
        City : "$data.City.value",
        Gender : "$data.Gender.value"
      }
    }
  }
])

परिणाम :

{ "_id" : "213412323234", "metadata" : { "Language" : "EN", "City" : "New York", "Gender" : "Male" } }

यदि ऊपर उल्लिखित दो पूर्व शर्तो में से कोई भी ज्ञात नहीं है, तो आप mapReduce

db.foo.mapReduce(function () {
  var key = this._id;
  var metadata = this.metadata;
  var valueEmit = {};
  for (var i = 0; i < metadata.length; i++) {
    valueEmit[metadata[i].id] = metadata[i].value;
  }
  emit(key, valueEmit)
},
function(key, values) {
  // do nothing as it won't be called 
  // for if value is only one 
  // for a key
},
{
  out : {replace : "foobar"}
})

परिणाम :

> db.foobar.find()
{ "_id" : "213412323234", "value" : { "Language" : "EN", "City" : "New York", "Gender" : "Male" } }

ध्यान दें कि कुंजी को value में बदल दिया गया है मेटाडेटा के बजाय। इसे $project . का उपयोग करके आसानी से ठीक किया जा सकता है aggregation . में foobar . पर संग्रह।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. क्वेरी ऑपरेटर में MongoDB $

  2. नेवला नोडज का उपयोग करके मोंगोडब डेटाबेस को फ़्लटर करें

  3. MongoDb दस्तावेज़ आईडी के सामने अंडरस्कोर क्यों है?

  4. आयरन-राउटर का उपयोग करके आप एक रूट कंट्रोलर के साथ कई टेम्प्लेट कैसे प्रस्तुत करते हैं?

  5. कैसे एक Node.js / एक्सप्रेस ऐप में नेवला पूर्व हुक के भीतर से क्वेरी करने के लिए?