我有一个集合的文档,如下所示:{ items: [ { price: 80 }, { price: 70 } ]},{ items: [ { price: 100 }, { price: 85 } ]},{ items: [ { price: 200 }, { price: 85 } ]},...我希望能够查询MyObj.find(query)所有项目价格总和在给定范围之间的所有文档。例如,$gte 160 和 $lte 200 只会返回示例中第二个文档的文档。const query = ???const filteredDocs = await MyObj.find(query).exec()这个查询看起来如何?
1 回答
杨__羊羊
TA贡献1943条经验 获得超7个赞
在这种情况下,您可以使用聚合。首先,添加字段代表项目价格与$addFields和$sum 的总和,然后查找文档中该字段符合您的条件。就像是:
MyObj.aggregate([
{
$addFields: {
total: {
$sum: "$items.price"
}
}
},
{
$match: {
total: {
$gte: 160,
$lte: 200
}
}
},
])
编辑:如果你只想使用find()
,你可以尝试$expr:
MyObj.find({
$expr: {
$and: [
{
$gte: [
{
$sum: "$items.price"
},
160
]
},
{
$lte: [
{
$sum: "$items.price"
},
200
]
}
]
}
})
添加回答
举报
0/150
提交
取消