Мне нужно проверить количество вхождений для определенного идентификатора продукта в массиве объектов высокой сложности.
Я попытался с помощью функции агрегации 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 самых популярных.проданные продукты на основе данных заказов.
Спасибо.