#javascript #mongodb
Вопрос:
Я только начал изучать внутреннюю разработку. И я создаю демонстрационное приложение. У меня есть коллекция с документом, который выглядит так:
{
"_id":"6083801e4b59bb38eeb9f232",
"sets":4,
"reps":"4-6",
"name":"deadlift",
"description":null,
"instructions":[
"keep feet sholder width apart",
"use legs first and then move to lower back"
]
}
Теперь я создаю API для обновления документа следующим образом:
db.collection('exercises').updateOne({ _id }, { $set: update })
где _id-это значение идентификатора, и update
это объект JS с обновленными значениями, который выглядит следующим образом:
{
"_id":"608380294b59bb38eeb9f233",
"description":[
"Second day - Legs 2"
],
"instructions":[
"More reps, less weight",
"keep feet shoulder-width apart",
"use legs first and then move to lower back",
"Keep at least 2 reps in the tank"
],
"reps":"6-8",
"sets":4,
"addNew":true
}
Я хочу объединить существующие данные об упражнениях с обновленными. Но мой запрос не работает. Одним из способов может быть get
получение данных об упражнениях по идентификатору, а затем их объединение вручную. А затем отправьте новые данные в качестве обновления. Но мне было интересно, есть ли изящный способ решить эту проблему. Как и в моем решении, мне придется сделать 2 сетевых вызова, и я не думаю, что это хороший способ решить эту проблему. Имейте в виду, что update
это может быть любое поле, это может быть только одно поле, это может быть несколько полей. Это также может быть вложенный объект.
Комментарии:
1. но вы можете просто обновить mongoplayground.net/p/qWG2SrJGwi6
2. @varman означает ли это, что мне нужно передать объект с именем
update
$set
? Как показывает номер строки в вашем примере, вы передаетеupdate
объект? Как объединить существующие значения с объектом? Нужно ли мне извлечь существующий документ, объединить его и затем выполнить запрос на обновление? Извините, если это очевидный вопрос, но я немного новичок в Монго.3. Вы также можете обновить корневой документ, но оба они разные
_id
, поэтому вам нужно быть осторожным при переопределении существующих полей mongoplayground.net/p/eT6i7yECRTV4. нет, мне не нужно обновлять поле идентификатора, я просто скопировал полезную нагрузку запроса от почтальона. Идентификатор всегда остается одним и тем же. но остальные поля будут/могут быть обновлены. Я отправляю идентификатор из полезной нагрузки, так как таким образом я буду знать, какой документ в коллекции мне нужно обновить. FE отправит только обновленную часть. BE позаботится о слиянии существующих и новых данных.
5. надеюсь, это решит вашу проблему