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) } } } )
热门文章
优秀文章