Заказать:
{
order_id: 1,
order_time: ISODate(...),
customer_id: 456,
products: [
{
product_id: 1,
product_name: "Pencil"
},
{
product_id: 2,
product_name: "Scissors"
},
{
product_id: 3,
product_name: "Tape"
}
]
}
У меня есть коллекция с целой кучей документов, как указано выше. Я хотел бы запросить последний заказ для каждого клиента, который заказал ножницы.
То есть, когда существует «products.product_name», которое равно «Scissors», сгруппированный по customer_id, дайте мне полный документ, где «order_time» является «max» для этой группы.
Чтобы найти документы, я мог бы сделать как find({ 'products.product_name' : "Scissors" })
, но тогда я получаю весь заказ с помощью ножниц, я хочу только самые последние.
Итак, я смотрю на агрегацию ... стадия агрегации Монго "$ group", кажется, требует, чтобы вы выполняли какое-то фактическое агрегирование внутри, например sum или max или что-то еще. Я предполагаю, что здесь есть какая-то комбинация $match
, $group
и $sort
, но я не могу заставить ее работать.
Что-то близкое:
db.storcap.aggregate(
[
{
$match: { 'products.product_name' : "Scissors" }
},
{
$sort: { created_at:-1 }
},
{
$group: {
_id: "$customer_id",
}
}]
)
Но это не возвращает полный документ, и я не уверен, что он правильно выполняет сортировку и группировку.