2017-02-17 7 views
0

Я хотел бы заменить объект в массиве с помощью индекса, но ничего не сохранится. Это то, что выглядит документ, как:Заменить объект в массиве в Mongoose

{ 
    "_id": { 
     "$oid": "58a71ec0c80a9a0436ae2fb1" 
    }, 
    "owner": "[email protected]", 
    "contacts": [ 
     { 
      "work": "", 
      "home": "", 
      "mobile": "", 
      "email": "", 
      "company": "", 
      "last": "Contact", 
      "middle": "", 
      "first": "New" 
     }, 
     { 
      "first": "Another", 
      "middle": "", 
      "last": "Contact", 
      "company": "", 
      "email": "", 
      "mobile": "", 
      "home": "", 
      "work": "" 
     } 
    ], 
    "__v": 1 
} 

И это то, что я пытался ..

Contacts.findById({_id: "58a71ec0c80a9a0436ae2fb1"}, function(err,document) { 
    document.contacts[req.body.indexOfObjectToBeEdited] = req.body.updatedObject 
    console.log(document) 
    document.save(function(err) { 
     return res.json({event:"Updated Contact"}) 
    }) 
}) 

Прямо перед document.save() I console.log (документ), и это отражает правильные изменения. Но когда я сохраняю, в mongodb ничего не обновляется, и я не получаю ошибок. Что я должен делать по-другому?

+0

Что вы имеете в виду, когда вы говорите, «когда я печатаю»? Вы имеете в виду после сохранения функции? –

+0

Прямо перед document.save, я буду console.log (документ), и он выглядит обновлен. Но когда я проверяю db после фактического сохранения, похоже, что он никогда не обновлялся. – Zach

ответ

2

попробуйте вставить эту строку прямо перед сохранением. Поскольку для модификации массива требуется, чтобы мы вручную указали на мангуст, он будет изменен.

document.markModified("contacts"); 

Проверьте на Замечания по использованию в документации для получения дополнительной информации http://mongoosejs.com/docs/schematypes.html

+0

Это сработало !!! Благодаря! – Zach

+0

Рад помочь ... –

+0

Узнал что-то новое! –