0

次のようなドキュメントがあります。

{
  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 }
  ]
}
4

1 に答える 1

2

データセットが大きすぎない場合は、mongo シェルからこれを実行できます。

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 );
});

コレクション名、適切な値などを変更するだけです...

于 2013-08-18T08:39:17.103 に答える