如果文档不存在而不更新现有文档(如果存在),如何插入文档?
让我们说我的文件如下:
{
"company":"test",
"name":"nameVal"
}
我想检查该集合是否包含公司test
,如果它不存在我想要创建一个新文档。如果它存在我想做什么都没有。我使用update
尝试了upsert = true
。但它会更新现有文档(如果存在)。
这就是我的尝试:
db.getCollection('companies').update(
{
"company": "test"
},
{
"company": "test",
"name": "nameVal2"
},
{upsert:true}
)
感谢使用一个查询解决此问题的任何帮助。
答案 0 :(得分:5)
您可以使用$setOnInsert之类的,
db.getCollection('companies').update(
{"company": "test"},
{ $setOnInsert: { "name": "nameVal2", ... } },
{ upsert: true }
)
如果此查询未执行插入,则$setOnInsert
将不起作用。因此,名称将仅在插入时更新。
答案 1 :(得分:0)
编辑:我被告知我的解决方案仅适用于原始帖子要求的数组。
如果您使用的是数组,则可以使用 $addToSet: 运算符代替 $SetOnInsert。
db.companies.updateOne(
{"company": "test"},
{ $addToSet: { ["name": "nameValue"]} },
{ new: true })
)