MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoDB групира всички ключове и стойности в колекция по определено поле

Там сте на прав път.

Когато преобразувате целия обект в масив, запазете и полето Категория.

Необходимите етапи:

  • $project за запазване на категорията и преобразуване на обекта в масив
  • $развийте масива, за да разгледате всяко поле отделно
  • $match за премахване на _id , Category и всякакви други полета, които не искате групирани от масива
  • $group по Category и k за да поставите стойностите на всеки ключ в масив
  • $group по Category за събиране на ключовете и масивите заедно
  • $project за преобразуване на масива със събраните стойности в обект
  • $addFields за инжектиране на категорията в новия обект
  • $replaceRoot за насърчаване на новия обект
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"}}
])

Playground




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да конвертирате низ в objectId в LocalField за $lookup Mongodb

  2. node.js express mongodb запазване на съобщения?

  3. Използвате JSON с MongoDB?

  4. Mongodb :$in оператор срещу много единични заявки

  5. Meteor:качване на файл от клиент в колекция Mongo срещу файлова система срещу GridFS