在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” ] }