在MongoDB中将值附加到数组的2种方法
如果MongoDB中有一个包含数组的文档集合,则可以根据需要向这些数组添加新值。
根据您的具体要求,您可以使用运算符或运算符。[$push](https://database.guide/mongodb-push/ "MongoDB $push")``[$addToSet](https://database.guide/mongodb-addtoset/ "MongoDB $addToSet")
运营商$push
假设我们有一个包含以下文档的集合:products
{ “_id” : 1, “product” : “Bat”, “sizes” : [ “S”, “M”, “L” ] } { “_id” : 2, “product” : “Hat”, “sizes” : [ “S”, “L”, “XL” ] } { “_id” : 3, “product” : “Cap”, “sizes” : [ “M”, “L” ] }
假设我们要在文档 3 中的数组后附加一个值。
我们可以结合使用来附加值:$push``[update()](https://database.guide/mongodb-update/ "MongoDB update()")
db.products.update(
{ _id: 3 },
{ $push: { sizes: "XL" } }
)
让我们再次查看集合以验证更改:
db.products.find()
结果:
{ “_id” : 1, “product” : “Bat”, “sizes” : [ “S”, “M”, “L” ] } { “_id” : 2, “product” : “Hat”, “sizes” : [ “S”, “L”, “XL” ] } { “_id” : 3, “product” : “Cap”, “sizes” : [ “M”, “L”, “XL” ] }
我们可以看到该值已添加到文档 3 中的数组中。XL
运算符还可以与各种修饰符一起使用,例如 、 和 。$push``$position``$sort``$slice
还可以使用修饰符向数组添加多个值。$each
有关示例,请参阅 MongoDB $push。
运营商$addToSet
运算符的工作方式与 类似,但有几件事除外:$addToSet``$push
- 如果您尝试添加的值已存在于数组中,则不会添加该值。
- 、 和修饰符不能与 一起使用。
$position``$sort``$slice``$addToSet
假设我们的集合如下所示:
{ “_id” : 1, “product” : “Bat”, “sizes” : [ “S”, “M”, “L”, “XL” ] } { “_id” : 2, “product” : “Hat”, “sizes” : [ “S”, “L”, “XL” ] } { “_id” : 3, “product” : “Cap”, “sizes” : [ “S”, “M”, “L”, “XL” ] }
让我们在文档 2 中的数组中插入多个值:
db.products.update(
{ _id: 2 },
{
$addToSet: {
sizes: {
$each: [ "XXL", "XXXL" ]
}
}
}
)
现在让我们再次检查集合:
db.products.find()
结果:
{ “_id” : 1, “product” : “Bat”, “sizes” : [ “S”, “M”, “L”, “XL” ] } { “_id” : 2, “product” : “Hat”, “sizes” : [ “S”, “L”, “XL”, “XXL”, “XXXL” ] } { “_id” : 3, “product” : “Cap”, “sizes” : [ “S”, “M”, “L”, “XL” ] }
我们可以看到,这两个值按预期附加到文档 2 中的数组中。
此示例使用修饰符,您也可以将其与运算符一起使用。$each``$push
我只使用了修饰符,因为我添加了多个值。如果我只使用一个值,我可以省略修饰符,语法看起来更像上面的例子。$each``$each``$push
如前所述,如果该值已存在,则不会添加该值。此外,对于这两个运算符,如果添加一个数组,整个数组将作为单独的值添加到现有数组中。
有关更多示例,请参阅 MongoDB $addToSet。