Получить все записи в виде списка на основе группирования по полю в mongo db

#mongodb

#mongodb

Вопрос:

В качестве примера у меня есть документы, подобные приведенным ниже :

 { "_id" : ObjectId("5ef0f23647c2b4dbae99105c"), "subcategory_name" : "ENTERPRISE ASSET MANAGEMENT", "category_id" : ObjectId("5ef0ec5547c2b4dbae990e9d"), "category_name" : "ERP", "status" : 0 }

{ "_id" : ObjectId("5ef0f23647c2b4dbae991062"), "subcategory_name" : "ENVIRONMENTAL HEALTH AND SAFETY SOFTWARE", "category_id" : ObjectId("5ef0ec5547c2b4dbae990e9d"), "category_name" : "ERP", "status" : 0 }
  

тогда я хочу получить такой результат :

 {
    "category_id": ObjectId("5ef0ec5547c2b4dbae990e9d"),
    "category_name": "ERP",
    "subcategory_list": [
      {"_id": ObjectId("5ef0f23647c2b4dbae99105c"), "subcategory_name": "ENTERPRISE ASSET MANAGEMENT"},
      {"_id": ObjectId("5ef0f23647c2b4dbae991062"), "subcategory_name": "ENVIRONMENTAL HEALTH AND SAFETY SOFTWARE"}
    ]
}
  

Ответ №1:

Вы можете использовать group для этого

 [
  {
    $group: {
      _id: "$category_id",
      category_id: {
        "$first": "$category_id"
      },
      category_name: {
        $first: "$category_name"
      },
      subcategory_list: {
        $addToSet: {
          _id: "$_id",
          subcategory_name: "$subcategory_name",
          
        }
      }
    }
  },
  {
    $project: {
      _id: 0
    }
  }
]
  

Работает игровая площадка Mongo