Мангуст, как мы обновляем вложенные объекты

#javascript #node.js #mongodb #mongoose

Вопрос:

Я пытаюсь обновить вложенный объект с помощью мангуста. Я пытаюсь обновить только «Дату напоминания» и сохранить «время». Я могу обновить «дату напоминания», однако это удаляет мое свойство «Время напоминания».

Я попробовал следующее, и ни один из них не работает

 Model.updateMany(req.query, { remindTime: { date: "2021-09-28" } })

Model.updateMany(req.query, { remindTime: $set:{ { date: "2021-09-28" } } } )
 

Данные базы данных, которые я обновляю

 {
    "_id": {
        "$oid": "614d3cedfb2600340fdb28f9"
    },
    "date": "2021-09-23",
    "title": "First test",
    "description": "not working yet",
    "remindTime": {
        "date": "2021-09-28",
        "time": "01:20 am"
    },
    "isComplete": false,
}
 

Ответ №1:

Пожалуйста, попробуйте это:

 Model.updateMany(req.query, { "remindTime.date": "2021-09-28"})
 

Ответ №2:

Вы можете использовать точечную нотацию:

Согласно документам:

MongoDB использует точечную нотацию для доступа к элементам массива и для доступа к полям встроенного документа.

Чтобы указать или получить доступ к полю встроенного документа с точечной нотацией, объедините имя встроенного документа с точкой (.) и именем поля и заключите в кавычки:

"<embedded document>.<field>"

Итак, запрос:

 Model.updateMany(req.query,
{
  "$set": {
    "remindTime.date": "new date"
  }
})
 

Пример здесь