Как вы обновляете документ mongodb при замене всего документа?

3

Если у меня есть документ с двумя значениями:

{
  "name" : "Bob",
  "location" "France"
}

И затем передайте массив в документ, который содержит "имя", "страна". Как обеспечить, чтобы весь документ обновлялся, удалив "местоположение"?

Я не буду знать различий между этими двумя документами, поэтому я не смогу отключить определенное поле. Я ищу способ просто заменить данные документа с предоставленным массивом.

  • 0
    Невозможно иметь документ в MongoDB, который имеет только эти два значения - он также должен иметь поле _id, которое будет однозначно идентифицировать его.
Теги:

1 ответ

6
Лучший ответ

Если вы предоставили update новый документ, содержащий нужные записи, вы замените документ.

Например:

db.so.insert({"name":"Bob", "location": "France"})
db.so.update({"name":"Bob", "location": "France"}, {"name":"Roberto", "country":"Italy"})
db.so.find()

{ "_id" : ObjectId(), "name" : "Roberto", "country" : "Italy" }

Конечно, если у вас был _id документа, это был бы лучший способ указать обновление (а не передавать обратно документ, который вы только что вставили, как указано выше)

  • 0
    Итак, чтобы сделать полное обновление, мне нужно передать исходный массив документов вместе с новым массивом документов? Я только что передал новый массив и только сейчас понял, что он не удаляет поля, которых не было в новом массиве.
  • 0
    Вам нужно только идентифицировать документ. В приведенном выше примере я делаю это, передавая исходный документ обратно, который однозначно идентифицирует документ. Вы можете сделать то же самое, передав _id существующего документа, который вы хотите обновить. Ознакомьтесь с документацией по обновлению в PHP, которая показывает разницу между обновлениями, которые заменяют, и обновлениями, которые просто изменяют часть документа.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню