MongoDB 更新操作符

MongoDB 更新操作符

以下修改器可用于更新操作。例如 – 在db.collection.update()和db.collection.findAndModify()中。

在文档中定义操作符表达式的形式:

{
   <operator1>: { <field1>: <value1>, ... },
   <operator2>: { <field2>: <value2>, ... },
}

字段操作符

$currentDate

它将字段的元素更新为当前日期,可以是日期或时间戳。这个操作员的默认数据类型是日期。

语法:

{ $currentDate: { <field1>: <typeSpecification1>, ... } }

示例:

            db.books.insertOne(
   { _id: 1, status: "a", lastModified: purchaseDate("2013-10-02T01:11:18.965Z") }
)

$inc

它根据指定的值增加一个字段。

语法:

{ $inc: { <field1>: <amount1>, <field2>: <amount2>, ... } }

示例:

              {
  _id: 000438,
  sku: "MongoDB",
  quantity: 1,
  metrics: {
    orders: 2,
    ratings: 3.5
  }
}

$min

如果指定的值小于当前字段的值,则将字段的值更改为指定的值。

语法:

{ $min: { <field1>: <value1>, ... } }

示例:

{ _id: 0021, highprice: 800, lowprice: 200 }
db.books.update( { _id: 0021 }, { $min: { highprice: 500 } } )

$max`

如果指定的值大于字段的当前值,则将字段的值更改为指定的值。

语法:

{ $max: { <field1>: <value1>, ... } }

示例:

{ _id: 0021, highprice: 800, lowprice: 200 }
db.books.update( { _id: 0021 }, { $max: { highprice: 950 } } )

$mul

它将字段的值乘以一个数字。

语法:

{ $mul: { <field1>: <number1>, ... } }

示例:

db.books.update(
   { _id: 1 },
   { $mul: { price: NumberDecimal("180.25"), qty: 2 } }
)

$rename 命令

该命令用于改变字段的名称。

语法:

{$rename: { <field1>: <newName1>, <field2>: <newName2>, ... } }

示例:

db.books.updateMany( {}, { $rename: { "nmae": "name" } } )

$set

set操作符将指定字段的值更改为指定的值。

语法:

{ $set: { <field1>: <value1>, ... } }

示例:

                {
  _id: 100,
  sku: "abc123",
  quantity: 50,
  instock: true,
  reorder: false,
  details: { model: "14Q2", make: "xyz" },
  tags: [ "technical", "non technical" ],
  ratings: [ { by: "ijk", rating: 4 } ]
}

$setOnInsert

如果upsert设置为true,则插入一个文档。setOnInsert操作符将指定的值分配给文档中的字段。

语法:

 db.collection.update(
   <query>,
   { $setOnInsert: { <field1>: <value1>, ... } },
   { upsert: true }
)

$unset

它删除指定的字段。

语法:

{ $unset: { <field1>: "", ... } }

示例:

               db.products.update(
   { sku: "unknown" },
   { $unset: { quantity: "", instock: "" } }
)

数组运算符

$

我们可以在数组中更新一个元素,而不需要明确指定元素的位置。

语法:

{ "<array>.$" : value }

示例:

                db.collection.update(
   { <array>: value ... },
   { <update operator>: { "<array>.$" : value } }
) 

$[ ]

定位操作符表示更新操作符应该更改给定数组字段中的所有元素。

语法:

{ <update operator>: { "<array>.$[]" : value } }

示例:

               db.collection.updateMany(
   { <query conditions> },
   { <update operator>: { "<array>.$[]" : value } }
)

$[<identifier>]

这是一个过滤位置运算符,用于标识数组元素。

语法:

{ <update operator>: { "<array>.$[<identifier>]" : value } },
{ arrayFilters: [ { <identifier>: <condition> } ] }

示例:

                db.collection.updateMany( { <query conditions> },
   { <update operator>: { "<array>.$[<identifier>]" : value } },
   { arrayFilters: [ { <identifier>: <condition> } ] } )

$addToSet

它将一个元素添加到数组中,除非该元素已经存在,否则该操作符不对该数组进行任何操作。

语法:

{ $addToSet: { <field1>: <value1>, ... } }

示例:

               db.books.update(
   { _id: 1 },
   { $addToSet: { tags: "MongoDB" } }
)

$pop

我们可以使用pop运算符从数组中删除第一个或最后一个元素。我们需要将pop的值分别设置为-1和1,以删除数组的第一个元素和最后一个元素。

语法:

{ $pop: { <field>: <-1 | 1>, ... } }

示例:

db.books.update( { _id: 1 }, { $pop: { mongoDB: -1 } } )

$pull

使用pull运算符,我们可以删除数组中与指定条件匹配的所有值的实例。

语法:

{ $pull: { <field1>: <value|condition>, <field2>: <value|condition>, ... } }

示例:

                db.books.update( { }, { pull: { Development: {in:["Java", "RDBMS" ] }, Tech: "Cybersecurity" } },
    { multi: true }
)

$push

它将指定的值添加到数组中。

语法:

{ $push: { <field1>: <value1>, ... } }

示例:

db.students.update( { _id: 9 }, { $push: { scores: 91 } } )

$pullAll

使用$pullAll操作符,我们可以从现有数组中删除所有匹配指定值的实例。它会删除与指定值相匹配的元素。

语法:

{ $pullAll: { <field1>: [ <value1>, <value2> ... ], ... } }

示例:

db.survey.update( { _id: 1 }, { $pullAll: { scores: [ 0, 5 ] } } )

修改器

$each

它与$addToSet操作符和$push操作符一起使用。它与addToSet操作符一起使用,如果在字段中不存在该值,则将多个值添加到数组中。

语法:

{ addToSet: { <field>: {each: [ <value1>, <value2> ... ] } } }

它与push运算符一起使用,用于将多个值附加到数组中。

语法:

{ push: { <field>: {each: [ <value1>, <value2> ... ] } } }

示例:

db.students.update( { name: "Akki" }, { push: { scores: {each: [ 90, 92, 85 ] } } } )

$position

它指定了push操作符在数组中插入元素的位置。

语法:

            {
  push: {
    <field>: {each: [ <value1>, <value2>, ... ],
       $position: <num>
    }
  }
}

示例:

               db.students.update(
   { _id: 1 },
   {
     push: {
        scores: {each: [ 50, 60, 70 ],
           $position: 0
        }
     }
   }
)

$slice

此修饰符用于在push操作过程中限制数组元素的数量。

语法:

             {
  push: {
     <field>: {each: [ <value1>, <value2>, ... ],
       $slice: <num>
     }
  }
}

示例:

               db.students.update(
   { _id: 1 },
   {
     push: {
       scores: {each: [ 80, 78, 86 ],
         $slice: -5
       }
     }
   }
)

$sort

sort修饰符在推送操作期间对数组的值进行排序。

语法:

            {
  push: {
     <field>: {each: [ <value1>, <value2>, ... ],
       $sort: <sort specification>
     }
  }
}

示例:

                db.students.update(
   { _id: 1 },
   {
     push: {
       quizzes: {each: [ { id: 3, score: 8 }, { id: 4, score: 7 }, { id: 5, score: 6 } ],
         $sort: { score: 1 }
       }
     }
   }
)

位运算符

$bit

位运算符通过位运算来更新字段。它支持位与、位或和位异或操作。

语法:

{ $bit: { <field>: { <and|or|xor>: <int> } } }

示例:

db.books.update( { _id: 1 }, { $bit: { expdata: { and: price(100) } } }
)

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程