如何获取文档 MangoDB&Mongoose 上的特定字段并聚合一些字段?
Posted
技术标签:
【中文标题】如何获取文档 MangoDB&Mongoose 上的特定字段并聚合一些字段?【英文标题】:How to get specific fields on document MangoDB&Mongoose and aggregate some of the fields? 【发布时间】:2021-12-08 10:38:11 【问题描述】:我的数据如下所示:
[
"_id":"61717cafd351f3ae8b6d205a",
"restaurant":"Hogwarts",
"purchasedAt":"2021-10-20T17:47:40.166Z",
"products":[
"name":"Meat Samosa",
"price":3.95,
"quantity":1,
"_id":"61717cafd351f3ae8b6d205b"
,
"name":"Pilau Rice",
"price":2.95,
"quantity":1,
"_id":"61717cafd351f3ae8b6d205f"
]
,
"_id":"61717cb2d351f3ae8b6dd05b",
"restaurant":"Hogwarts",
"purchasedAt":"2021-10-20T03:14:11.111Z",
"products":[
"name":"Pilau Rice",
"price":2.95,
"quantity":1,
"_id":"61717cb2d351f3ae8b6dd05d"
]
,
]
我正在尝试查找一个查询,该查询将为我提供所有产品(无重复)及其数量的总和。请注意,即使它们相同(相同名称),产品 id 也是不同的 理想情况下,我的回复应该是这样的
[
name: "Meat Samosa",
price: 3.95,
quantity: 1
,
name: "Pilau Rice",
price: 2.95,
quantity: 2
]
【问题讨论】:
【参考方案1】:$project
显示必填字段
$unwind
解构 products
数组
$group
by name
并获得第一个 price
并计算 quantity
总和
$project
显示必填字段
db.collection.aggregate([
$project:
_id: 0,
products: 1
,
$unwind: "$products" ,
$group:
_id: "$products.name",
price: $first: "$products.price" ,
quantity: $sum: "$products.quantity"
,
$project:
_id: 0,
name: "$_id",
price: 1,
quantity: 1
])
Playground
【讨论】:
这正是我所需要的。太感谢了!请问,如何根据数量字段对聚合结果进行降序排序? 你可以使用$sort
阶段最后 $sort: quantity: -1
,降序-1和升序1。
您将如何处理仅退回两天前购买的产品?以及在响应中包含restaurant
和purchasedAt
字段?以上是关于如何获取文档 MangoDB&Mongoose 上的特定字段并聚合一些字段?的主要内容,如果未能解决你的问题,请参考以下文章