📜  MongoDB - $addToSet 操作符

📅  最后修改于: 2022-05-13 01:56:58.294000             🧑  作者: Mango

MongoDB - $addToSet 操作符

MongoDB 提供了不同类型的数组更新运算符来更新文档中数组字段的值,$addToSet运算符就是其中之一。此运算符用于向数组添加值,如果该值已存在于数组中,则此运算符将不执行任何操作。

句法:

{ $addToSet: { : , ... } }

在这里, 可以在嵌入/嵌套文档中用点表示法指定。

  • 此运算符不会在数组中插入重复项,也不会影响已存在的重复项。在这里,值的顺序无关紧要。
  • 如果$addToSet运算符的指定字段在文档中不存在,则此运算符在文档中创建一个包含值或项的数组字段。
  • 如果指定的值是$addToSet运算符的数组,则此运算符会将整个数组作为单个项目追加。或者,如果您想在数组中单独添加项目,则使用 $each 修饰符。
  • 此运算符不适用于非数组字段。
  • 如果该值是一个文档,则 MongoDB 会检查该文档是否存在于数组中。如果指定的文档包含相同的字段和值,并且该字段的顺序也与现有文档相同,则指定的文档是重复文档,因为 $addToSet运算符不会在数组中添加此类文档。
  • 您可以根据需要将此运算符与 update()、findAndModify() 等方法一起使用。

在数组中添加值:

在这个例子中,我们在满足指定条件的文档的语言数组中添加“JS++”值,即名称:“Rohit”。

db.contributor.update({name: "Rohit"}, {$addToSet: {language: "JS++"}})

在数组中添加重复值:

在这个例子中,我们在满足指定条件的文档的语言数组中添加“Perl”值,即名称:“Sumit”。但是 $addToSet运算符不会在语言数组中添加这个值,因为它已经存在于语言数组中。

db.contributor.update({name: "Sumit"}, {$addToSet: {language: "Perl"}})

将 $each 修饰符与 $addToSet运算符:

在这个例子中,我们在 $each 修饰符的帮助下在语言数组中添加多个值,即 [“Perl”, “Go”, “Ruby”]。这里,“Perl”没有添加到数组中,因为它已经存在。

db.contributor.update({name: "Sumit"}, {$addToSet: 
                      {language:{$each: ["Perl", "Go", "Ruby"]}}})