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 }
)
Другие вопросы по тегам