Подсчет вхождения id в сложный массив объектов структуры (mongodb) - PullRequest
0 голосов
/ 27 января 2019

Мне нужно проверить количество вхождений для определенного идентификатора продукта в массиве объектов высокой сложности.

Я попытался с помощью функции агрегации MongoDB, но я получил только вхождения на документ, а неслучаи пересекают все документы.Структура данных каждого документа выглядит следующим образом:

{
    "_id" : ObjectId("5c4d67905a07f5dec1fcc763"),
    "updatedAt" : ISODate("2019-01-27T08:16:11.706Z"),
    "createdAt" : ISODate("2019-01-27T08:10:56.553Z"),
    "pickupTime" : ISODate("2019-01-27T08:20:00.000Z"),
    "shop" : ObjectId("5c24b007b55ea3d7c599c95b"),
    "owner" : ObjectId("5c242e361ee775cdd8b047b6"),
    "total" : 350,
    "status" : "completed",
    "lineItems" : [ 
        {
            "product" : {
                "options" : [],
                "enabled" : false,
                "description" : "",
                "shop" : ObjectId("5c24b007b55ea3d7c599c95b"),
                "price" : 350,
                "name" : "Capuccino",
                "createdAt" : ISODate("2019-01-01T21:56:31.928Z"),
                "updatedAt" : ISODate("2019-01-08T12:14:53.322Z"),
                "_id" : ObjectId("5c2be20f8e52115849726fdc")
            },
            "_id" : ObjectId("5c48efbc9efde32fab7ae47d"),
            "status" : "pending",
            "quantity" : 1,
            "config" : []
        }
    ],
    "__v" : 0
}

Как видно, каждый документ представляет собой заказ, каждый заказ имеет lineItems, который представляет собой массив объектов, которые содержат количество желаемого продукта, статустекущего продукта, некоторой конфигурации и самого продукта.Поле продукта представляет собой снимок продукта на момент заказа, поскольку он может быть изменен поставщиком (стоимость, описание имени и т. Д.)

В настоящее время я опробовал следующую формулу агрегирования:

{
        $group: {
          _id: {
            'product': '$lineItems.product._id'
          },
          count: {
            $sum: 1
          }
        }
      }

Но только возвращает вхождения продукта в каждом заказе, а не пересекает все заказы.Я понял, что мне нужно использовать $ less для переформатирования структуры данных, но я не мог найти способ упорядочить мою текущую структуру данных, чтобы она соответствовала.Кроме того, мне сказали, что после подсчета по каждому продукту я могу использовать сортировку $, чтобы поместить самые высокие значения в верх, а затем ограничить поиск количеством записей, чтобы получить

. Желаемый результат - получить 5 самых популярных.проданные продукты на основе данных заказов.

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...