白豬掌柜的
2023-03-18 17:19:14
我有一個集合的文檔,如下所示:{ 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
提交
取消