Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.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中使用mapReduce和Doctrine实现奇怪的对象值而不是浮点值_Mongodb_Doctrine Orm_Mapreduce_Doctrine - Fatal编程技术网

在mongodb中使用mapReduce和Doctrine实现奇怪的对象值而不是浮点值

在mongodb中使用mapReduce和Doctrine实现奇怪的对象值而不是浮点值,mongodb,doctrine-orm,mapreduce,doctrine,Mongodb,Doctrine Orm,Mapreduce,Doctrine,我使用mongo查询计算每个项目的总价。 我的问题看起来是这样的 $queryBuilder=newquery\Builder($this$documentName) 这很有效,没问题。但我发现在某些情况下(大约200个结果中的20个),我在字段sum中得到了奇怪的结果-我看到的是类似于 [objectObject]44444 4-是项目的价格 我尝试将reduce块替换为块,如下所示: var sum = 0; for (var i = 0; i < valuesPric

我使用mongo查询计算每个项目的总价。 我的问题看起来是这样的

$queryBuilder=newquery\Builder($this$documentName)

这很有效,没问题。但我发现在某些情况下(大约200个结果中的20个),我在字段
sum
中得到了奇怪的结果-我看到的是类似于

[objectObject]44444

4-是项目的价格

我尝试将reduce块替换为块,如下所示:

    var sum = 0;
    for (var i = 0; i < valuesPrices.length; i++) {
        sum += parseFloat(valuesPrices[i]);
    }
    return {sum: sum}
var总和=0;
对于(变量i=0;i
在这种情况下,我看到
NAN

我怀疑字段
price
中的某些数据插入错误(不是作为float,而是作为字符串、对象等)。我尝试从mongo cli执行查询,发现所有价格值都是整数。

这一点都不“奇怪”。你现在正在为此付出代价

  • MongoDB可以为同一个键多次调用reduce函数。在这种情况下,该键的reduce函数的上一个输出将成为该键下一次reduce函数调用的输入值之一
mapReduce
(引用)的主要规则是必须从“reducer”返回与从“mapper”返回的结构完全相同的结构。这是因为“减速器”实际上可以为同一个“键”运行多次。这就是
mapReduce
处理大型列表的方式

您只需返回一个单数值即可解决此问题,就像在“发射”中所做的那样:

返回数组.sum(值);
这样就不会有问题了。添加一个对象键会使数据不一致,因此当“减少”的结果再次反馈到“减少”中时,会出现错误。

这一点都不“奇怪”。你现在正在为此付出代价

  • MongoDB可以为同一个键多次调用reduce函数。在这种情况下,该键的reduce函数的上一个输出将成为该键下一次reduce函数调用的输入值之一
mapReduce
(引用)的主要规则是必须从“reducer”返回与从“mapper”返回的结构完全相同的结构。这是因为“减速器”实际上可以为同一个“键”运行多次。这就是
mapReduce
处理大型列表的方式

您只需返回一个单数值即可解决此问题,就像在“发射”中所做的那样:

返回数组.sum(值);

这样就不会有问题了。向中添加对象键会导致数据不一致,因此,当“缩减”结果再次反馈到“缩减器”时,会出现错误。

Thank you@Blakes Saven。这是我第一次使用mapReduce,我犯了一个错误。@yAnTar这实际上是一个“常见的错误”,因为许多人因为“假设”reducer函数只被调用一次而忽略了这一概念。在小数据测试中,这实际上是他们看到的唯一结果。实际上,对于您的特定操作,您最好使用,但这可能是另一个问题。别忘了解决问题。谢谢@Blakes Saven。这是我第一次使用mapReduce,我犯了一个错误。@yAnTar这实际上是一个“常见的错误”,因为许多人因为“假设”reducer函数只被调用一次而忽略了这一概念。在小数据测试中,这实际上是他们看到的唯一结果。实际上,对于您的特定操作,您最好使用,但这可能是另一个问题。别忘了,那能解决问题。
    var sum = 0;
    for (var i = 0; i < valuesPrices.length; i++) {
        sum += parseFloat(valuesPrices[i]);
    }
    return {sum: sum}