findAndModify объект, используя ключ переменной
Я пытаюсь обновить запись, которая имеет переменный ключ и ранее существующий объект, связанный с этим ключом, как таковой:
[variable_name] : {
date : 'XXXX'
}
Как я могу использовать findAndModify(), чтобы вставить больше значений ключа в эту структуру, не удаляя существующие данные? Я не мог понять это, используя $set и объект обновления, который напоминал updateObj[variable_name] = { newProp : newData }
,
2 ответа
Слишком поздно ответить на вопрос, но надеюсь, что это поможет другим.
Вы можете сделать следующее, используя литералы шаблона и вычисляемое свойство
const key = `${variable_name}.newProp`;
db.update({_id: myId}, { $set: { [key]: newData } });
Использовать $set
оператор вместе с точечной нотацией для указания нового поля во встроенном документе. Например, так как newProp
поле не существует, и вы указываете пунктирный путь для этого несуществующего поля, $set
добавит новое поле с указанным значением, создавая при этом внедренные документы, необходимые для выполнения пунктирного пути к полю. {upsert: true}
Флаг создает новый документ, когда ни один документ не соответствует критериям запроса. Значением по умолчанию является false, которое не вставляет новый документ, когда совпадение не найдено:
db.collection.update(
{ "variable_name.date": ISODate("2015-09-23T18:06:00.696Z") },
{ $set: { "variable_name.newProp": "zzz" } },
{ "upsert": true }
)