📅  最后修改于: 2020-11-23 00:55:11             🧑  作者: Mango
以下修饰符可用于更新操作。例如-在db.collection.update()和db.collection.findAndModify()中。
在以下格式的文档中定义运算符表达式:
{
: { : , ... },
: { : , ... },
}
它将字段的元素更新为当前日期(日期或时间戳)。该运算符的默认数据类型是日期。
句法:
{ $currentDate: { : , ... } }
例:
db.books.insertOne(
{ _id: 1, status: "a", lastModified: purchaseDate("2013-10-02T01:11:18.965Z") }
)
它将字段增加指定的值。
句法:
{ $inc: { : , : , ... } }
例:
{
_id: 000438,
sku: "MongoDB",
quantity: 1,
metrics: {
orders: 2,
ratings: 3.5
}
}
如果指定的值小于字段的当前值,则它将字段的值更改为指定的值。
句法:
{ $min: { : , ... } }
例:
{ _id: 0021, highprice: 800, lowprice: 200 }
db.books.update( { _id: 0021 }, { $min: { highprice: 500 } } )
如果指定的值大于字段的当前值,它将字段的值更改为指定的值。
句法:
{ $max: { : , ... } }
例:
{ _id: 0021, highprice: 800, lowprice: 200 }
db.books.update( { _id: 0021 }, { $max: { highprice: 950 } } )
它将字段的值乘以数字。
句法:
{ $mul: { : , ... } }
例:
db.books.update(
{ _id: 1 },
{ $mul: { price: NumberDecimal("180.25"), qty: 2 } }
)
重命名运算符更改字段的名称。
句法:
{$rename: { : , : , ... } }
例:
db.books.updateMany( {}, { $rename: { "nmae": "name" } } )
集合运算符使用指定的值更改字段的值。
句法:
{ $set: { : , ... } }
例:
{
_id: 100,
sku: "abc123",
quantity: 50,
instock: true,
reorder: false,
details: { model: "14Q2", make: "xyz" },
tags: [ "technical", "non technical" ],
ratings: [ { by: "ijk", rating: 4 } ]
}
如果upsert设置为true,则将导致插入文档,然后setOnInsert运算符将指定的值分配给文档中的字段。
句法:
db.collection.update(
,
{ $setOnInsert: { : , ... } },
{ upsert: true }
)
它删除指定的字段。
句法:
{ $unset: { : "", ... } }
例:
db.products.update(
{ sku: "unknown" },
{ $unset: { quantity: "", instock: "" } }
)
我们可以在不显式指定元素位置的情况下更新数组中的元素。
句法:
{ ".$" : value }
例:
db.collection.update(
{ : value ... },
{ : { ".$" : value } }
)
位置运算符指示更新运算符应更改给定数组字段中的所有元素。
句法:
{ : { ".$[]" : value } }
例:
db.collection.updateMany(
{ },
{ : { ".$[]" : value } }
)
它称为标识数组元素的过滤后的位置运算符符。
句法:
{ : { ".$[]" : value } },
{ arrayFilters: [ { : } ] }
例:
db.collection.updateMany( { },
{ : { ".$[]" : value } },
{ arrayFilters: [ { : } ] } )
除非该元素已经存在,否则它将元素添加到数组中,在这种情况下,此运算符对该数组不执行任何操作。
句法:
{ $addToSet: { : , ... } }
例:
db.books.update(
{ _id: 1 },
{ $addToSet: { tags: "MongoDB" } }
)
我们可以使用pop运算符删除数组的第一个或最后一个元素。我们需要将pop的值传递为-1来删除数组的第一个元素,并传递1来删除数组的最后一个元素。
句法:
{ $pop: { : <-1 | 1>, ... } }
例:
db.books.update( { _id: 1 }, { $pop: { mongoDB: -1 } } )
使用pull运算符,我们可以删除匹配指定条件的数组中值的所有实例。
句法:
{ $pull: { : , : , ... } }
例:
db.books.update( { }, { $pull: { Development: { $in:["Java", "RDBMS" ] }, Tech: "Cybersecurity" } },
{ multi: true }
)
它将指定的值附加到数组。
句法:
{ $push: { : , ... } }
例:
db.students.update( { _id: 9 }, { $push: { scores: 91 } } )
我们可以使用pullAll运算符从现有数组中删除所有指定值的实例。它删除与列出的值匹配的元素。
句法:
{ $pullAll: { : [ , ... ], ... } }
例:
db.survey.update( { _id: 1 }, { $pullAll: { scores: [ 0, 5 ] } } )
它与$ addToSet运算符和$ push运算符。如果该值不存在于字段中,则它与addToSet运算符一起使用以将多个值添加到数组。
句法:
{ $addToSet: { : { $each: [ , ... ] } } }
它与push运算符一起使用,可将多个值附加到数组。
句法:
{ $push: { : { $each: [ , ... ] } } }
例:
db.students.update( { name: "Akki" }, { $push: { scores: { $each: [ 90, 92, 85 ] } } } )
它指定push运算符在数组内插入元素的位置。
句法:
{
$push: {
: {
$each: [ , , ... ],
$position:
}
}
}
例:
db.students.update(
{ _id: 1 },
{
$push: {
scores: {
$each: [ 50, 60, 70 ],
$position: 0
}
}
}
)
该修饰符用于限制推入操作期间数组元素的数量。
句法:
{
$push: {
: {
$each: [ , , ... ],
$slice:
}
}
}
例:
db.students.update(
{ _id: 1 },
{
$push: {
scores: {
$each: [ 80, 78, 86 ],
$slice: -5
}
}
}
)
sort修饰符在推入操作期间排列数组的值。
句法:
{
$push: {
: {
$each: [ , , ... ],
$sort:
}
}
}
例:
db.students.update(
{ _id: 1 },
{
$push: {
quizzes: {
$each: [ { id: 3, score: 8 }, { id: 4, score: 7 }, { id: 5, score: 6 } ],
$sort: { score: 1 }
}
}
}
)
位运算符使用按位运算符更新字段。它支持按位与,按位或以及按位XOR操作。
句法:
{ $bit: { : { : } } }
例:
db.books.update( { _id: 1 }, { $bit: { expdata: { and: price(100) } } }
)