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

MongoDB mengelompokkan semua kunci dan nilai dalam koleksi berdasarkan bidang tertentu

Anda berada di jalur yang benar.

Saat mengonversi seluruh objek menjadi larik, simpan juga bidang Kategori.

Tahapan yang dibutuhkan:

  • $project untuk menyimpan Kategori dan mengonversi objek menjadi array
  • $unwind array untuk mempertimbangkan setiap bidang secara terpisah
  • $match untuk menghapus _id , Category dan bidang lain yang tidak ingin Anda kelompokkan dari larik
  • $kelompokkan menurut Category dan k untuk mendorong nilai setiap kunci ke dalam array
  • $kelompokkan menurut Category untuk mengumpulkan kunci dan larik bersama
  • $project untuk mengonversi array dengan nilai yang dikumpulkan menjadi objek
  • $addFields untuk memasukkan Kategori ke dalam objek baru
  • $replaceRoot untuk mempromosikan objek baru
db.collection.aggregate([
  {$project: {
      Category: 1,
      fields: {$objectToArray: "$$ROOT"}
  }},
  {$unwind: "$fields"},
  {$match: {"fields.k": {$not: {$in: ["_id","Category"]}} }},
  {$group: {
      _id: {
        Category: "$Category",
        key: "$fields.k"
      },
      value: {$push: "$fields.v"}
  }},
  {$group: {
      _id: "$_id.Category",
      fields: {
        $push: {
          "k": "$_id.key",
          "v": "$value"
        }
      }
  }},
  {$project: {
      fields: {$arrayToObject: "$fields"}
  }},
  {$addFields: {
      "fields.Category": "$_id"
  }},
  {$replaceRoot: { newRoot: "$fields"}}
])

Taman bermain




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bagaimana cara memanggil db.Collection.stats() dari driver Java Mongo

  2. Apakah mungkin untuk memiliki kondisi pada populasi luwak?

  3. Spring Data MongoDB Annotation @CreatedDate tidak berfungsi, ketika ID ditetapkan secara manual

  4. Bagaimana menemukan Semua di mongoosejs?

  5. Mengapa ada pelanggaran akses saat menghubungkan ke MongoDB dari C++?