在MongoDB中的数组中的特定位置插入一个值

发布于

在MongoDB中,您可以使用运算符将值附加到数组中。[$push](https://database.guide/mongodb-push/ "MongoDB $push")

此运算符可以与各种修饰符一起使用,其中一个是修饰符。修饰符允许您指定数组中要插入新值的位置。$position``$position

向数组的开头添加值

假设我们有以下集合:

{ “_id” : 1, “prod” : “Bat”, “sizes” : [ “S”, “M”, “XL” ] } { “_id” : 2, “prod” : “Hat”, “sizes” : [ “S”, “L”, “XL” ] } { “_id” : 3, “prod” : “Cap”, “sizes” : [ “M”, “L” ] }

假设我们要在文档 3 中数组的开头添加一个值。

我们可以这样做:

db.products.update(
   { _id: 3 },
   { 
     $push: { 
        sizes: {
           $each: [ "S" ],
           $position: 0
        }
      } 
    }
)

现在让我们再次检查集合:

db.products.find()

结果:

{ “_id” : 1, “prod” : “Bat”, “sizes” : [ “S”, “M”, “XL” ] } { “_id” : 2, “prod” : “Hat”, “sizes” : [ “S”, “L”, “XL” ] } { “_id” : 3, “prod” : “Cap”, “sizes” : [ “S”, “M”, “L” ] }

数组从零开始,因此将值添加为数组中的第一个元素。position: 0

在数组中间添加一个值

假设我们要将值添加到文档 2,并且我们希望它在 和 之间移动。M``S``L

以下是我们如何做到这一点:

db.products.update(
   { _id: 2 },
   { 
     $push: { 
        sizes: {
           $each: [ "M" ],
           $position: 1
        }
      } 
    }
)

现在让我们再次检查集合:

db.products.find()

结果:

{ “_id” : 1, “prod” : “Bat”, “sizes” : [ “S”, “M”, “XL” ] } { “_id” : 2, “prod” : “Hat”, “sizes” : [ “S”, “M”, “L”, “XL” ] } { “_id” : 3, “prod” : “Cap”, “sizes” : [ “S”, “M”, “L” ] }

我们使用了 ,因为这是我们想要去的位置(即第二个位置)。$position: 1``M

负值

您还可以提供负值作为位置。执行此操作时,该值将从末尾开始倒计时插入到指定的负位置。

假设我们要插入文档 1 之间和文档 1 中。L``M``XL

以下是我们使用负仓位的方法:

db.products.update(
   { _id: 1 },
   { 
     $push: { 
        sizes: {
           $each: [ "L" ],
           $position: -1
        }
      } 
    }
)

检查结果:

db.products.find()

结果:

{ “_id” : 1, “prod” : “Bat”, “sizes” : [ “S”, “M”, “L”, “XL” ] } { “_id” : 2, “prod” : “Hat”, “sizes” : [ “S”, “M”, “L”, “XL” ] } { “_id” : 3, “prod” : “Cap”, “sizes” : [ “S”, “M”, “L” ] }

对于负索引位置,如果在数组中指定多个元素,则最后添加的元素位于末尾的指定位置。$each