Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 是否自动递增/求和查询结果的一个字段?_Mongodb - Fatal编程技术网

Mongodb 是否自动递增/求和查询结果的一个字段?

Mongodb 是否自动递增/求和查询结果的一个字段?,mongodb,Mongodb,我举一个例子来解释: 我收集了100万件ID为123的物品,每件物品的价值不同:“价值” 有钱的用户x可以“购买”物品。我基本上想知道用户可以以最优雅的方式购买多少物品 所以我得到了 db.items.find({Item_ID:123},{Item_Age:1,Item_worth:1}.sort({Item_age:1}) ->提供按年龄排序的项目ID为123的所有项目 我现在可以 迭代所有项目,直到项目价值的总和==用户的钱,但不知何故,我认为如果返回的列表与100万个项目匹配,并且用

我举一个例子来解释:

我收集了100万件ID为123的物品,每件物品的价值不同:“价值”

有钱的用户x可以“购买”物品。我基本上想知道用户可以以最优雅的方式购买多少物品

所以我得到了

db.items.find({Item_ID:123},{Item_Age:1,Item_worth:1}.sort({Item_age:1})
->提供按年龄排序的项目ID为123的所有项目

我现在可以

  • 迭代所有项目,直到项目价值的总和==用户的钱,但不知何故,我认为如果返回的列表与100万个项目匹配,并且用户可能只有1000个项目的钱,那么这并不是真正有效的

  • 执行循环并查询1000次

  • 将查询限制为100项。但这是非常不稳定的,仍然可能导致许多循环
那么有没有一种查询方法可以返回每个文档中所有值的总和?? 或者任何其他有效的建议都可能有用


谢谢

对于这一点,使用迭代可以获得项目的运行总数,然后过滤结果

因此,请按如下方式定义映射器:

var映射器=函数(){
总价值=总价值+此项价值;
var canBuy=userMoney>=totalWorth;
如果(可以购买){
散发(
{
Item\u ID:this.Item\u ID,
Item_Age:此。Item_Age
},
{
价值:这个。物品价值,
totalWorth:totalWorth,
canBuy:canBuy
}
);
}
}
这会将
totalWorth
的变量与项目的当前“价值”累加起来。然后检查当前的
totalWorth
值是否超过输入的
userMoney
金额。如果没有,则不发射。这是自动过滤

所有发出的关键点都是唯一的,因此只需按如下方式运行mapReduce:

db.items.mapReduce(
制图员,
函数(){},//虽然未调用,但需要reduce参数
{
查询:{Item_ID:123}
排序:{Item_ID:1,Item_Age:1},
输出:{inline:1},
范围:{
总价值:0,
用户货币:30
}, 
}
)
因此,看看其中的其他部分:

  • 查询:是用于获取选择的标准查询对象

  • 排序:实际上不是必需的,因为您正在按升序查看
    项目。但是,如果您首先需要最旧的
    项目_Age
    ,则可以反向排序

  • out:提供一个内联对象作为结果,可用于获取匹配项

  • 范围:定义可由函数访问的全局变量。因此,我们为
    totalWorth
    提供一个初始值,并将
    userMoney
    的参数值传递为用户必须购买的金额


在一天结束时,结果包含用户可以购买的金额范围内的物品的过滤列表。

所以您想要的是按物品年龄排序的前X个物品,其中物品的总价值小于或等于用户的钱?哇,回答得很好。我看了一下地图,但没能想清楚这太完美了,谢谢!您会看到输出有点“时髦”,但mapReduce就是这样做的。不过,它跳过了一些步骤,处理过程只是代码。很高兴这有帮助。