Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb如何仅在不存在时插入(如果存在则不更新)?_Mongodb - Fatal编程技术网

Mongodb如何仅在不存在时插入(如果存在则不更新)?

Mongodb如何仅在不存在时插入(如果存在则不更新)?,mongodb,Mongodb,如果文档不存在,如何插入该文档,而如果现有文档存在,如何不更新该文档 假设我有一份文件如下: { "company":"test", "name":"nameVal" } 我想检查集合是否包含companytest,如果它不存在,我想创建一个新文档。如果它存在,我什么也不想做。我用upsert=true尝试了update。但它会更新现有文档(如果存在) 这就是我所尝试的: db.getCollection('companies').update(

如果文档不存在,如何插入该文档,而如果现有文档存在,如何不更新该文档

假设我有一份文件如下:

  {
          "company":"test", 
          "name":"nameVal"
}
我想检查集合是否包含company
test
,如果它不存在,我想创建一个新文档。如果它存在,我什么也不想做。我用
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 })
)