MongoDB 更新操作

以下修饰符可用于更新操作。例如:在 db.collection.update() 和 db.collection.findAndModify() 中。

在表单的文档中定义运算符表达式:

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

一、MongoDB 属性运算符

$currentDate

$currentDate将字段的元素更新为当前日期,可以是日期或时间戳。此运算符的默认数据类型是日期。

语法:

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

示例:

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

$inc

$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如果指定的值大于字段的当前值,它将字段的值更改为指定的值。

语法:

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

示例:

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

$mul

$mul将字段的值乘以一个数字。

语法:

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

示例:

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

$rename

$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删除指定的字段。

语法:

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

示例:

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

二、MongoDB 数组运算符

$

我们可以在不显式指定元素位置的情况下更新数组中的元素。

语法:

{ "<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>]

$[<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 运算符删除数组的第一个或最后一个元素。我们需要将 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 将指定的值附加到数组。

语法:

{ $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 ] } } )  

三、MongoDB 修饰符

$each

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

语法:

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

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

语法:

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

示例:

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

$position

$position 指定 push 运算符在数组中插入元素的位置。

语法:

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

示例:

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

$slice

$slice 修饰符用于在推送操作期间限制数组元素的数量。

语法:

{  
$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 }  
       }  
     }  
   }  
)  

四、MongoDB 位运算符

$bit

$bit 位运算符使用按位运算更新字段。它支持按位与、按位或和按位异或运算。

语法:

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

示例:

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

 

热门文章

优秀文章