5

次のようなデータセットがあります。

{ 
  name : 'Doc Name',
  photos: [
      {
        name: 'photo1',
        url: 'http://.....'
      },
      {
        name: 'photo2',
        url: 'http://......'
      }
   ],
   etc ...

Monk https://github.com/LearnBoost/monkを使用して photo2 を更新するにはどうすればよいですか? 現在、フィールドを反復処理しているため、インデックスを使用できます。

以下の現在の試みではエラーが発生し、(インデックスのように) JSON セレクターに変数を使用できません。

collection.update({_id: data._id}, {photos[i].data: filename}, function(err, updatedata) {

            });
4

2 に答える 2

8

配列内の位置にあるアイテムの更新は、位置$演算子を使用して行うことができます

collection.update( 
    { _id: data.id, "photos.name": "photo2" }, 
    { $set: { "photos.$.data": "yourdata" } }
)
于 2014-02-03T02:06:16.237 に答える
0

そのため、問題の解決策を見つけましたが、より良いオプションがいくつかある可能性があるため、未回答のままにします. しかし、同じ問題を抱えている他の人のために、これは私がしたことです:

Node.js で MongoDB ドキュメントをオブジェクトとして抽出し、ドキュメントを操作してから、単一の update ステートメントで配列全体を置き換えました。たとえば、ここにいくつかの擬似コードがあります:

collection.find({id: 1}, function(err, doc){
    for(i=0; i< doc.array.length; i++) {
          //do what you gotta do
          doc.array[i].property = 'new value';
    }
    collection.update({id: 1}, {$set : {"doc.array": doc.array}}, function(err,doc){
          console.log(err);
    }
})
于 2014-02-03T02:11:55.323 に答える