更新数组的项目

时间:2013-08-18 01:23:43

标签: javascript mongodb

我的文件看起来像这样:

{
  name: "Name1",
  values: [ 
    { type: "type1", value: 123 },
    { type: "type2", value: 456 },
    { type: "type3", value: 666 },
    { type: "type3", value: 777 }
  ]
}

他们中有很多人。如何更新所有文档,以便每个文档只有一个values.type3大于另一个文档:

{
  name: "Name1",
  values: [ 
    { type: "type1", value: 123 },
    { type: "type2", value: 456 },
    { type: "type3", value: 777 }
  ]
}

1 个答案:

答案 0 :(得分:2)

如果数据集不是太大,可以从mongo shell运行:

db.collection.find({ 'values.type': 'type3' }).forEach( function(doc) {
   var values = [];
   var tmp = { value: 0 };

   for( var v in doc.values )
   {
      v = doc.values[v];
      if ( v.type !== "type3" ) 
         values.push( v );
      else if ( v.value > tmp.value )
         tmp = v;
   }

   values.push( tmp );
   doc.values = values;

   db.collection.save( doc );
});

只需更改集合名称,正确值等......