2016-03-30 25 views
0

オブジェクトの配列を持つドキュメントがあり、1つのオブジェクトに複数のオブジェクトが含まれています$setで内部オブジェクトを更新したいのですが、 誰でも私にそれを解決できるように私に何かヒントを与えることができますか?Mongoose:入れ子にされた配列オブジェクトで更新が機能しない

これは私の物である:

{ 
    "_id": ObjectId("56fbfafdf86fa6161911d104"), 
    "site": "xyz", 
    "adsPerCategory": NumberInt(2), 
    "sampledAt": ISODate("2016-03-30T16:12:45.138+0000"), 
    "items": [ 
    { 
     "id": "4563873", 
     "content": { 
     "title": "WATER DISTILLERS", 
     "body": "Perfect to save money.", 
     } 
    }, 
    { 
     "id": "4563s23232873", 
     "content": { 
     "title": "Cola water", 
     "body": "Perfect for body.", 
     } 
    } 
    ] 
} 

私はbodyを更新したいです。

今のところ私はsingle objectを与えていますが、それは倍数にすることができます。私は0を置くが、私はそれを動的にしたい場合には、正常に動作しています

models.Sample.update(
    { 
    _id: samples._id 
    }, 
    '$set': { 
    'items.0.content.body': body.description 
    }, 
    function(err, numAffected) { 
    console.log(err); 
    console.log('Affected....', numAffected); 
    } 
); 

を試みたものをここで

'items.index.content.body': body.description同様

はありがとうございました。

+0

あなたは同じボディコンテンツを持つすべてのアイテムを更新したいと思いますか? –

+0

いいえ、項目には複数のオブジェクトがあり、各オブジェクトには異なるボディコンテンツがあります したがって、異なる内容のすべてのボディを繰り返し更新するのに 'foreach'を使用しました。 – abdulbarik

+0

私はボディ値を更新しました。 – abdulbarik

答えて

0

私はこのようなことができると思います。

models.Sample.find({ _id: ObjectId(samples._id) }) 
    .forEach(function (doc) { 
     doc.items.forEach(function (element, index, array) { 
      items[index].content.body = body.description; 
     }); 
    models.Sample.save(doc); 
}); 
+0

私はすでにこれを試してみましたがうまくいきませんでした。これはすべて配列アイテムを除いて更新されます。 – abdulbarik

+0

'doc.markModified( 'doc.items')'を設定して助けてください。 'models.Sample.save(doc);の前に置いてください。 –

関連する問題