2015-09-23 3 views
1

Я пытаюсь обновить запись, которая имеет переменный ключ и уже существующий объект, связанный с этим ключом, как таковые:findAndModify объект с помощью переменной Key

[variable_name] : { 
    date : 'XXXX' 
} 

Как я могу использовать findAndModify() для вставить больше ключевых значений в эту структуру, не удаляя существующие данные? Я не мог понять это, используя $ set и объект обновления, который был похож на updateObj[variable_name] = { newProp : newData }.

+0

попробовать этот db.collection.update ({ "variable_name.date": "XXXX"}, {variable_name: {newProp : newData}}) –

+0

Не будет ли использовать строковый литерал «имя_переменной», где мне нужны данные, связанные с переменной «variable_name»? –

+0

Да, но я предполагаю, что ваше переменное имя не будет изменено, как изначально ваш документ, подобный этому -> {"key": {"a": 1}}, а после обновления будет {"key": {"b": 2 }} –

ответ

0

Используйте $set оператор вместе с dot notation указать новое поле во встроенном документе. Например, поскольку поле newProp не существует, и вы указываете точечный путь для этого несуществующего поля, $set добавит новое поле с указанным значением, тем самым создав вложенные документы по мере необходимости, чтобы выполнить пунктирный путь к полю , Флаг {upsert: true} создает новый документ, если документ не соответствует критериям запроса. Значение по умолчанию является ложным, не вставить новый документ, если совпадение не найдено:

db.collection.update(
    { "variable_name.date": ISODate("2015-09-23T18:06:00.696Z") }, 
    { $set: { "variable_name.newProp": "zzz" } }, 
    { "upsert": true } 
)