我正在尝试更新具有变量键和与该键关联的预先存在的对象的记录,如下所示:
[variable_name] : {
date : 'XXXX'
}
如何在不删除现有数据的情况下使用findAndModify()在该结构中插入更多键值?我无法使用$ set和类似updateObj[variable_name] = { newProp : newData }
的更新对象来解决这个问题。
答案 0 :(得分:0)
将 $set
运算符与 dot notation 一起使用,以在嵌入文档中指定新字段。例如,由于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 }
)
答案 1 :(得分:0)
您可以使用Template Literals和Computed Property
执行以下操作const key = `${variable_name}.newProp`;
db.update({_id: myId}, { $set: { [key]: newData } });