2016-03-30 3 views
0

У меня есть документ с массивом объектов, а один объект содержит несколько объектов. Я хочу обновить внутренний объект $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, но он может быть кратным.

Вот что я пытался

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

Это работает отлично, если я ставлю 0, но я хочу, чтобы сделать его динамичным.

'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);' –

Смежные вопросы