Как обновить встроенные массивы / объекты в MongoDb с помощью mon goose? - PullRequest
0 голосов
/ 19 марта 2020

Мой документ MongoDB выглядит так:

  {_id: ObjectId("xxx"),  
   username: 'user',  
   active_courses: [  
        {'name': 'MongoDB',  
         'notes': [  
           {'title': 'Note title',  
            'note': 'Actual note content'}  
       ]}  
    ]  

И теперь мне нужно обновить объект заметок с заголовком «Заголовок заметки». Как я могу это сделать?

Я пробовал следующее, но это не работает.

Student.findOneAndUpdate(
		{username:req.body.username},
		{$set: {'active_courses.$[course].notes.$[note]': req.body}},
		{arrayFilters: [{'course.name': req.body.course},{'note.title': req.body.title} ]})
	.then(result => {
		res.status(200).json({message: 'Note saved!'})
	})

И кстати, я не знаю индексы массивов, поэтому я не могу использовать active_courses [0] .notes ...

Благодарю за любую помощь с этим вопросом. Спасибо!

1 Ответ

1 голос
/ 19 марта 2020

Вы можете определить ваши встроенные документы как схему, таким образом mon goose автоматически генерирует объект для них. С этим идентификатором вы можете получить доступ и затем изменить свой вложенный документ через его родителя следующим образом:

var doc = parent.children.id(_id);

Пн goose вложенные документы

...