gpt4 book ai didi

json - 如何获取集合中的文档列表,直到 'cost' 字段的总和达到特定值(mongoDb)?

转载 作者:太空宇宙 更新时间:2023-11-04 00:07:19 24 4
gpt4 key购买 nike

我有一个收藏:

[
{
_id:1,
dish:pizza,
cost:52
},
{
_id:2,
dish:burger,
cost:33,
},
{
_id:3,
dish:sandwich,
cost:64,
}
{
_id:4,
dish:noodles,
cost:23
},
]

我的预算设置等于某个值,比如 60。

是否可以按成本asc顺序对菜肴进行排序,并获取成本总和小于或等于60的前n个文档?

此处:成本为 23(面条)+33(汉堡)<=60,因此获取了这 2 个文档。

输出应该是:

[
{
_id:4,
dish:noodles,
cost:23
},
{
_id:2,
dish:burger,
cost:33,
}
]

最佳答案

你可以尝试这个map-reduce命令:

// Variable for map
var _map = function () {
emit(null,this);
};

// Variable for reduce
var _reduce = function (key, values) {
var sum = 0;
var resultArray=[]
for(value in values){
sum=sum+values[value].cost;
if(sum<=60){
resultArray.push(values[value]);
}
}
var result = {};
result.selected=resultArray;
return result;
}
;

db.runCommand({
mapReduce: "01",
map: _map,
reduce: _reduce,
out: { "inline" : 1},
query: {},
sort: {cost:1},
inputDB: "testing",
});
})

注意按命令中指示的成本排序。您可以在映射减少之前使用查询对象过滤您的文档。它将输出

{ 
"_id" : null,
"value" : {
"selected" : [
{
"_id" : 4,
"dish" : "noodles",
"cost" : 23
},
{
"_id" : 2,
"dish" : "burger",
"cost" : 33
}
]
}
}

此时访问 value.selected 来获取结果非常容易。希望对您有所帮助。

关于json - 如何获取集合中的文档列表,直到 'cost' 字段的总和达到特定值(mongoDb)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51662298/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com