MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Memformat ulang koleksi menggunakan pipa agregasi di Mongodb

Jika posisi elemen dalam metadata bidang dan kunci dokumen yang disematkan diketahui dan kemudian Anda dapat menggunakan agregasi.

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"
      }
    }
  }
])

Hasil :

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

Jika salah satu dari dua prasyarat yang disebutkan di atas tidak diketahui, Anda dapat menggunakan 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"}
})

Hasil :

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

Perhatikan bahwa kunci telah diubah menjadi value bukannya metadata. Ini dapat dengan mudah diperbaiki menggunakan $project dalam aggregation di foobar koleksi.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. arrayFilters pada pembaruan php mongodb

  2. case tidak sensitif temukan di mongodb untuk nama pengguna di php

  3. MongoDB:Menghitung berapa banyak item dengan nilai tertentu yang ada dalam array, yang ada di dokumen?

  4. Nodejs + mongodb :Bagaimana cara menanyakan bidang $ref?

  5. Ganti Dokumen Tertanam menggunakan driver Mongo C# 2.0