MongoDB - $addToSet 操作符
MongoDB 提供了不同类型的数组更新运算符来更新文档中数组字段的值,$addToSet运算符就是其中之一。此运算符用于向数组添加值,如果该值已存在于数组中,则此运算符将不执行任何操作。
句法:
{ $addToSet: { : , ... } }
在这里,
- 此运算符不会在数组中插入重复项,也不会影响已存在的重复项。在这里,值的顺序无关紧要。
- 如果
$addToSet
运算符的指定字段在文档中不存在,则此运算符在文档中创建一个包含值或项的数组字段。 - 如果指定的值是
$addToSet
运算符的数组,则此运算符会将整个数组作为单个项目追加。或者,如果您想在数组中单独添加项目,则使用 $each 修饰符。 - 此运算符不适用于非数组字段。
- 如果该值是一个文档,则 MongoDB 会检查该文档是否存在于数组中。如果指定的文档包含相同的字段和值,并且该字段的顺序也与现有文档相同,则指定的文档是重复文档,因为 $addToSet运算符不会在数组中添加此类文档。
- 您可以根据需要将此运算符与 update()、findAndModify() 等方法一起使用。
In the following examples, we are working with:
Database: GeeksforGeeks
Collection: contributor
Document: two documents that contain the details of the contributor in the form of field-value pairs.
在数组中添加值:
在这个例子中,我们在满足指定条件的文档的语言数组中添加“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"]}}})