On this page本页内容
$position
The $position modifier specifies the location in the array at which the $push operator inserts elements. $position修饰符指定数组中$push运算符插入元素的位置。Without the 如果没有$position modifier, the $push operator inserts elements to the end of the array. $position修饰符,$push运算符将元素插入数组的末尾。See $push modifiers for more information.有关详细信息,请参阅$push修饰符。
To use the 要使用$position modifier, it must appear with the $each modifier.$position修饰符,它必须与$each修饰符一起出现。
{
$push: {
<field>: {
$each: [ <value1>, <value2>, ... ],
$position: <num>
}
}
}
Changed in version 3.6.在版本3.6中更改。
$position<num> indicates the position in the array, based on a zero-based index:根据从零开始的索引指示数组中的位置:
<num> is greater or equal to the length of the array, the $position modifier has no effect and $push adds elements to the end of the array.<num>的值大于或等于数组的长度,则$position修饰符无效,$push将元素添加到数组的末尾。-1 indicates the position just before the last element in the array. -1表示数组中最后一个元素之前的位置。$each array, the last added element is in the specified position from the end. $each数组中指定多个元素,则最后添加的元素位于从末尾开始的指定位置。<num> is greater than or equal to the length of the array, the $push adds elements to the beginning of the array.<num>的绝对值大于或等于数组的长度,则$push会将元素添加到数组的开头。Starting in MongoDB 5.0, update operators process document fields with string-based names in lexicographic order. 从MongoDB5.0开始,update运算符使用基于字符串的名称按字典顺序处理文档字段。Fields with numeric names are processed in numeric order. 具有数字名称的字段按数字顺序处理。See Update Operators Behavior for details.有关详细信息,请参阅更新运算符行为。
Create the 创建students collection:students集合:
db.students.insertOne( { "_id" : 1, "scores" : [ 100 ] } )
The following operation updates the 以下操作更新scores field to add the elements 50, 60 and 70 to the beginning of the array:scores字段,将元素50、60和70添加到数组的开头:
db.students.updateOne(
{ _id: 1 },
{
$push: {
scores: {
$each: [ 50, 60, 70 ],
$position: 0
}
}
}
)
The operation results in the following updated document:该操作将生成以下更新文档:
{ "_id" : 1, "scores" : [ 50, 60, 70, 100 ] }
Add a document to the 将文档添加到students collection:students集合:
db.students.insertOne( { "_id" : 2, "scores" : [ 50, 60, 70, 100 ] } )
The following operation updates the 以下操作更新scores field to add the elements 20 and 30 at the array index of 2:scores字段,以在数组索引2处添加元素20和30:
db.students.updateOne(
{ _id: 2 },
{
$push: {
scores: {
$each: [ 20, 30 ],
$position: 2
}
}
}
)
The operation results in the following updated document:该操作将生成以下更新文档:
{ "_id" : 2, "scores" : [ 50, 60, 20, 30, 70, 100 ] }
$position can accept a negative array index value to indicate the position starting from the end, counting from (but not including) the last element of the array. 可以接受一个负数组索引值,以指示从末尾开始的位置,从数组的最后一个元素开始计算(但不包括)。For example, 例如,-1 indicates the position just before the last element in the array.-1表示数组中最后一个元素之前的位置。
Add the following document to the 将以下文档添加到students collection:students集合:
db.students.insertOne(
{ "_id" : 3, "scores" : [ 50, 60, 20, 30, 70, 100 ] }
)
The following operation specifies 下面的操作为-2 for the $position to add 90 at the position two places before the last element, and then 80 at the position two places before the last element.$position指定-2,以在最后一个元素前两个位置添加90,然后在最后一元素前两位位置添加80。
db.students.updateOne(
{ _id: 3 },
{
$push: {
scores: {
$each: [ 90, 80 ],
$position: -2
}
}
}
)
The operation results in the following updated document:该操作将生成以下更新文档:
{ "_id" : 3, "scores" : [ 50, 60, 20, 30, 90, 80, 70, 100 ] }