2010-09-30 5 views
24

В MongoDB как вы используете $set для обновления вложенного значения?

Для примера рассмотрим коллекцию людей следующий документ:

{ 
    _id: ObjectId("5a7e395e20a31e44e0e7e284"), 
    name: "foo", 
    address: { street: "123", town: "bar" } 
} 

Как обновить street поле внедренный в address документе от "123" к "Main Street"?

ответ

42

Использование dot notation:

db.people.update({ }, { $set: { "address.street": "Main Street" } }) 
+3

Работает ли это, даже если адрес не существует? Я знаю, что $ set создаст улицу, если она не существует по адресу, но что такое поведение, если свойства предков не существуют? Кроме того, для вашей ссылки требуется логин. – Tom

+2

@ Тома, спасибо за хедз-ап по ссылке, я ее исправил. Чтобы ответить на ваш вопрос: он создаст для вас искомые наследственные свойства, если они не существуют. –

+0

@ Тома Да, это будет. Он создаст весь объект до поля, которое вы устанавливаете. (Поздний ответ, но, надеюсь, это полезно для других, спотыкающихся об этом вопросе) – Nepoxx

1

В дополнении к ответу Нильса, тоже проверить „типа“ вложенного значения. В моем случае это была «строка», сформированная из json. Хотя это может быть маловероятным, но убедитесь, что значение имеет правильный тип.

 Смежные вопросы

  • Нет связанных вопросов^_^