我在mongodb中有一个gifts
集合,里面有四个项目。如何查询数据库,以便仅获得礼物,它们的amount
的总和小于或等于5500?
因此,例如db中的这四个礼物:
{
"_id": 1,
"amount": 3000,
},
{
"_id": 2,
"amount": 2000,
},
{
"_id": 3,
"amount": 1000,
},
{
"_id": 4,
"amount": 5000,
}
查询应仅返回前两个:
{
"_id": 1,
"amount": 3000,
},
{
"_id": 1,
"amount": 2000,
},
我认为我应该使用mongo 聚合?如果是这样,语法是什么?
我进行了一些谷歌搜索,我知道如何在$sum
阶段使用$group
,但是我不知道如何在$match
阶段使用它。有可能这样做吗?
P.S:我想我应该在$sum
中使用$match
,我应该首先对它们进行分组吗?如果是这样,我如何告诉mongo组成一个组,该组中的总和小于或等于5500?
感谢您能提供的任何帮助。
答案 0 :(得分:1)
您的方法正确。
首先将您的$sum
存储在变量中,然后用$match
进行过滤:
db.gifts.aggregate([
{$match: {}}, // Initial query
{$group: {
_id: '$code', // Assume your gift could be grouped by a unique code
sum: {$sum: '$amount'}, // Sum all amount per group
items: {$push: '$$ROOT'} // Push all gift item to an array
}},
{$match: {sum: {$lte: 5500}}}, // Filter group where sum <= 5500
{$unwind: '$items'}, // Unwind items array to get all match field
{$replaceRoot: {newRoot: '$items'}} // Use this stage to get back the original items
])