Mongodb如何仅在不存在时插入(如果存在则不更新)?
如果文档不存在,如何插入该文档,而如果现有文档存在,如何不更新该文档 假设我有一份文件如下:Mongodb如何仅在不存在时插入(如果存在则不更新)?,mongodb,Mongodb,如果文档不存在,如何插入该文档,而如果现有文档存在,如何不更新该文档 假设我有一份文件如下: { "company":"test", "name":"nameVal" } 我想检查集合是否包含companytest,如果它不存在,我想创建一个新文档。如果它存在,我什么也不想做。我用upsert=true尝试了update。但它会更新现有文档(如果存在) 这就是我所尝试的: db.getCollection('companies').update(
{
"company":"test",
"name":"nameVal"
}
我想检查集合是否包含companytest
,如果它不存在,我想创建一个新文档。如果它存在,我什么也不想做。我用upsert=true
尝试了update
。但它会更新现有文档(如果存在)
这就是我所尝试的:
db.getCollection('companies').update(
{
"company": "test"
},
{
"company": "test",
"name": "nameVal2"
},
{upsert:true}
)
感谢使用一个查询解决此问题的任何帮助 您可以使用like
如果此更新操作不执行插入,
$setOnInsert
将不会产生任何效果。因此,名称只会在插入时更新。编辑:我被告知我的解决方案只适用于一个数组,而不是原始帖子所要求的数组
如果使用的是数组,则可以使用运算符而不是$SetOnInsert
db.companies.updateOne(
{"company": "test"},
{ $addToSet: { ["name": "nameValue"]} },
{ new: true })
)
您可以在集合中创建“唯一约束”。参考:这不符合提问者的要求。如果字段存在并且是数组,它将被更新,如果字段存在并且不是数组,它将返回一个错误,如果字段不存在,它将被添加。哦,我明白了,谢谢你的更正!
db.companies.updateOne(
{"company": "test"},
{ $addToSet: { ["name": "nameValue"]} },
{ new: true })
)