提问人:Sindhu1990 提问时间:8/4/2023 最后编辑:Sindhu1990 更新时间:8/4/2023 访问量:15
如何使用 mongoose 通过匹配对象数组中的值来聚合 mongodb 数据?
How to aggregate mongodb data by matching a value in object array using mongoose?
问:
嗨,我在mongodb中有以下数据
{
"_id": {
"$oid": "64ca10afd4b19833b87298d4"
},
"orderId": "597628170576",
"items": [
{
"_id": {
"$oid": "64ca10b2d4b19833b87298d7"
},
"item_id": "ITEM_004",
"title": "Sampoo",
"subtotal": 28,
"total": 30.32,
"tax": 2.32,
"discount": 20
}
]
},
{
"_id": {
"$oid": "64ca10afd4b19833b87298d4"
},
"orderId": "597628170576",
"items": [
{
"_id": {
"$oid": "64ca10b2d4b19833b87298d7"
},
"item_id": "ITEM_004",
"title": "Sampoo",
"quantity": 4,
"tax": 2.32,
"discount": 20
}
]
}
我有一个要求,我必须匹配 items.tax >0 并显示
以下是我尝试的聚合
model.aggregate([
{
$match: {
item: {
$elemMatch: {
tax: { $gt: 0 }
}
}
}
},
{ $group: { _id: null, count: { $sum: 1 } } }
])
但这似乎给了我空值,请告诉我如何进一步进行
答:
0赞
Jota0222
8/4/2023
#1
在您编辑之后,我注意到这些项目确实是嵌套的,因此,问题可能是该属性是“items”(复数形式),而您正在查看一个不存在的称为“item”的属性。
所以这应该有效:
model.aggregate([
{
$match: {
items: {
$elementMatch: {
tax: { $gt: 0 }
}
}
}
},
{ $group: { _id: null, count: { $sum: 1 } } }
])
或更短:
model.aggregate([
{
$match: {
"items.tax": { $gt: 0 }
}
},
{ $group: { _id: null, count: { $sum: 1 } } }
])
更多信息请见:https://www.mongodb.com/docs/manual/reference/operator/query/elemMatch/#examples
评论
0赞
Sindhu1990
8/4/2023
我已经编辑了我的数据,请让我知道这是否有效
评论