在MongoDB中删除数组中的值的3种方法
MongoDB提供了一些运算符,使您能够从数组中删除值。
其中包括:
$pull$pullAll$pop
运营商$pull
运算符从现有数组中删除与指定条件匹配的一个或多个值的所有实例。[$pull](https://database.guide/mongodb-pull/ "MongoDB $pull")
假设我们有一个包含以下文档的集合:products
{ “_id” : 1, “prod” : “Bat”, “sizes” : [ “S”, “M”, “XL”, “XXL” ] } { “_id” : 2, “prod” : “Hat”, “sizes” : [ “S”, “L”, “XL” ] } { “_id” : 3, “prod” : “Cap”, “sizes” : [ “XS”, “S”, “M”, “L”, “XL” ] }
我们可以像这样从文档 1 的数组中删除一个元素:
db.products.update(
{ _id: 1 },
{ $pull: { sizes: "XXL" } }
)
现在,当我们检查集合时,我们可以看到已按指定从文档 1 中删除:XXL
db.products.find()
结果:
{ “_id” : 1, “prod” : “Bat”, “sizes” : [ “S”, “M”, “XL” ] } { “_id” : 2, “prod” : “Hat”, “sizes” : [ “S”, “L”, “XL” ] } { “_id” : 3, “prod” : “Cap”, “sizes” : [ “XS”, “S”, “M”, “L”, “XL” ] }
运营商$pullAll
运算符从数组中删除指定值的所有实例。[$pullAll](https://database.guide/mongodb-pullall/ "MongoDB $pullAll")
假设我们有一个包含以下文档的集合:
{ “_id” : 1, “bar” : [ 1, 7, 2, 3, 8, 7, 1 ] } { “_id” : 2, “bar” : [ 0, 1, 8, 17, 18, 8 ] } { “_id” : 3, “bar” : [ 15, 11, 8, 0, 1, 3 ] }
我们想从文档 1 中的数组中删除 的所有值。7
我们可以这样做:
db.foo.update(
{ _id: 1 },
{ $pullAll: { bar: [ 7 ] } }
)
这会从文档 1 中的数组中删除两个出现的 7。
我们可以通过检查集合来验证这一点:
db.foo.find()
结果:
{ “_id” : 1, “bar” : [ 1, 2, 3, 8, 1 ] } { “_id” : 2, “bar” : [ 0, 1, 8, 17, 18, 8 ] } { “_id” : 3, “bar” : [ 15, 11, 8, 0, 1, 3 ] }
我们可以看到文档 1 中的数组已按指定删除其所有值。7
虽然与 类似,但不同之处在于会删除与所列值匹配的元素。这与 不同,在 中,您可以通过指定查询来删除值。$pullAll``$pull``$pullAll``$pull
运营商$pop
运算符删除数组的第一个或最后一个元素。[$pop](https://database.guide/mongodb-pop/ "MongoDB $pop")
提供值 以删除第一个元素,并删除最后一个元素。-1``1
假设我们有一个包含以下文档的集合:products
{ “_id” : 1, “prod” : “Bat”, “sizes” : [ “M”, “L”, “XL” ] } { “_id” : 2, “prod” : “Hat”, “sizes” : [ “S”, “M”, “L”, “XL” ] } { “_id” : 3, “prod” : “Cap”, “sizes” : [ “S”, “M”, “L” ] }
以下代码从文档 1 中的数组中删除最后一个元素:
db.products.update(
{ _id: 2 },
{ $pop: { sizes: 1 } }
)
我们可以通过检查集合来验证这一点:
db.products.find()
结果:
{ “_id” : 1, “prod” : “Bat”, “sizes” : [ “M”, “L”, “XL” ] } { “_id” : 2, “prod” : “Hat”, “sizes” : [ “S”, “M”, “L” ] } { “_id” : 3, “prod” : “Cap”, “sizes” : [ “S”, “M”, “L” ] }