使用Mongo和Meteor更新数组中的对象

时间:2015-03-04 05:13:24

标签: mongodb meteor

在我的Meteor应用程序中,我有一个文档(来自mongo集合),其中的一部分数据是一个对象数组。

我创建了一个遍历对象数组的循环,使用每个数组索引中对象的信息来计算新的数据点。 (具体而言,使用均值来计算方差和标准差)。

然后,我想在该数组索引处更新对象,以包含新数据点(方差和标准偏差)。

JSON对象:

    "row_sum" : [
    {
        "name" : "Total Inches of Rainfall",
        "row_int" : 1,
        "mean" : 14.492753623188406
    },
    {
        "name" : "Inches Above/Below (+/-)135 Year Average",
        "row_int" : 2,
        "mean" : 0.13043478260869565
    }
],

我想要的输出是:

    "row_sum" : [
    {
        "name" : "Total Inches of Rainfall",
        "row_int" : 1,
        "mean" : 14.492753623188406
        "variance" : 1234,
        "sd" : 1111
    },
    {
        "name" : "Inches Above/Below (+/-)135 Year Average",
        "row_int" : 2,
        "mean" : 0.13043478260869565,
        "variance" : 1234,
        "sd" : 1111
    }
],

这是我目前的输出:

    "row_sum" : [
    {
        "name" : "Total Inches of Rainfall",
        "row_int" : 1,
        "mean" : 14.492753623188406
    },
    {
        "name" : "Inches Above/Below (+/-)135 Year Average",
        "row_int" : 2,
        "mean" : 0.13043478260869565
    },
    {
        "variance" : 48.24328113588513,
        "sd" : 6.945738343465375
    },
    {
        "variance" : 48.024652540384196,
        "sd" : 6.929982145747866
    }
],

正如您所看到的,它只是将数据作为对象数组中的新对象附加,而不是更新在数组循环中索引的特定对象。

这是包含循环和Mongo Update命令的代码部分:

for (var i = 0; i < row_sum.length; i++){
        var variance = this.calculate_variance(data_summary_id, row_sum[i]);    
        var standard_deviation = Math.sqrt(variance);
         var sum_data = {
                    row_sum : { 
                        variance: variance,
                        sd: standard_deviation
                }
            }
        DataSetSummary.update(data_summary_id, {$push: sum_data});

    }   

1 个答案:

答案 0 :(得分:1)

尝试$ set方法和位置运算符$。使用以下查询

db.test.update({"row_sum.row_int":1},{$set:"row_sum.$.variance":1,"row_sum.$.sd" : 6.9}})

由于它是行中的元素,您必须使用位置参数,请尝试以下问题more answer