在我的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});
}
答案 0 :(得分:1)
尝试$ set方法和位置运算符$。使用以下查询
db.test.update({"row_sum.row_int":1},{$set:"row_sum.$.variance":1,"row_sum.$.sd" : 6.9}})
由于它是行中的元素,您必须使用位置参数,请尝试以下问题more answer