Страницы

Поиск по вопросам

суббота, 4 апреля 2020 г.

Как сделать группировку в mongodb?

#mongodb #nosql

                    
Есть коллекция с документами вида:

{
    "_id" : ObjectId("56e17f2db292c9151a8b459b"),
    "title" : "test title",
    "category" : "test category",
    "pubDate" : "1457599100",
    "code" : "ZZZ"
},
{
    "_id" : ObjectId("56e17f2db292c9151a8b459b"),
    "title" : "test 2 title",
    "category" : "test 2 category",
    "pubDate" : "1457599200",
    "code" : "ZZZ"
}


Как сделать группировку, чтобы получить на выходе что-то типа этого:

{
  "ZZZ": {
    "items": {
      0:{
         "_id" : ObjectId("56e17f2db292c9151a8b459b"),
         "title" : "test title",
         "category" : "test category",
         "pubDate" : "1457599100"
      },
      1:{
         "_id" : ObjectId("56e17f2db292c9151a8b459b"),
         "title" : "test 2 title",
         "category" : "test 2 category",
         "pubDate" : "1457599100"
      }
    }
  }
}

    


Ответы

Ответ 1



Используйте Aggregation Framework и оператор $group: db.test.aggregate([ { $group: { _id: "$code", "items": { $push: { "_id": "$_id", "title": "$title", "category": "$category", "pubDate": "$pubDate" } } } } ]) Результат запроса: [ { "_id" : "ZZZ", "items" : [ { "_id" : ObjectId("56e17f2db292c9151a8b459b"), "title" : "test title", "category" : "test category", "pubDate" : "1457599100" }, { "_id" : ObjectId("56e17f2db292c9151a8a459b"), "title" : "test 2 title", "category" : "test 2 category", "pubDate" : "1457599200" } ] } ] Полученный результат слегка отличается от запрошенного, но, в целом, можно настроить его, поработав с $project.

Комментариев нет:

Отправить комментарий