js和mongoose以及我发现解决这个问题有些困难,因为我的mongodb数据库中有订单模式,我想从最高到最低排列最畅销的产品,这是文档的外观:
因此,如图所示,有一个shopping_cart,它是一个产品数组,可以通过product _id区分这些产品,并且每个产品都有数量(价格不相关)。
const topselling=Order.aggregate([
{
"$unwind": "$items"
},
{
"$group": {
"_id": "$items.itemId",
"sum": {
"$sum": "$items.qty"
}
}
},
{
"$sort": {
sum: -1
}
},
{
"$group": {
"_id": null,
"top_selling_products ": {
$push: "$_id"
}
}
}
])
console.log(topselling)
但是当我控制台记录时,我得到了这样的输出:
Aggregate {
_pipeline: [
{ '$unwind': '$items' },
{ '$group': [Object] },
{ '$sort': [Object] },
{ '$group': [Object] }
],
_model: Model { Order },
options: {}
}
我希望输出如下所示:
[
{
"_id": null,
"top_selling_products ": [
{"title":"carrots","price":100,"imageUrl":"...imageurl"...},
{"title":"Beans","price":200,"imageUrl":"...imageurl"...},
]
}
]
1条答案
按热度按时间vmdwslir1#
在
Model.aggregate()
文档中,查询没有执行,您必须提供回调函数才能执行它。这两种方法都可以:
1.提供回调。
1.使用异步函数(
await
)。1.使用
.exec()
执行查询。当你把
ObjectId
而不是object推入top_selling_products
数组时,$last
组阶段有一些东西。最后一个$group
应该是:$$ROOT
表示整个文档。您的最终输出将是: