MongoDB 之 updateMany
使用
https://www.mongodb.com/docs/v6.0/reference/operator/update/#update-operators
db.collection.updateMany(
<filter>,
<update>,
{
upsert: <boolean>,
writeConcern: <document>,
collation: <document>,
arrayFilters: [ <filterdocument1>, ... ],
hint: <document|string> // Available starting in MongoDB 4.2.1
}
)
常规用法之 Update document
使用
- 在这里的
$set
只能把字段的value变成固定值,既{field: value}
,没办法做过多转换
db.order.updateMany({"_id":"xxx"},{$set:{comment:"new comment"}});
updateMany 支持的 update operators
这些支持了我们大部分的使用场景,但是如果我想更新一个字段的类型呢?
更新字段类型语句
先说结果,感兴趣可以继续看下去
db.order_configs.updateMany(
{ "_id": "xxx" },
[
{ $set: { "price": { $toDouble: "$price" } } }
]
);
另有玄机之 Aggregation pipeline
Aggregation pipeline 中的 $set
https://www.mongodb.com/docs/v6.0/reference/operator/aggregation/set/#definition
-
可以看出来,这里的
$set
使用的是{ $set: { <newField>: <expression>, ... } }
, 而不再是一个简单的value. -
我们再来看看
<expression>
是什么?
这里有很多可操作的类型,就不枚举了。感兴趣看文档 https://www.mongodb.com/docs/v6.0/meta/aggregation-quick-reference/#std-label-aggregation-expressions
更新字段的类型
db.order_configs.updateMany(
{ "_id": "xxx" },
[
{ $set: { "price": { $toDouble: "$price" } } }
]
);
-
{ $toDouble: "$price" }
是一个 expression,"$price"
也是一个 expression. 前者是一个operator,后者是一个text,$
指当前文档
mongo的操作各式各样,感兴趣大家可以自行查看文档来寻找自己需要的功能