> 文章列表 > MongoDB 之 updateMany

MongoDB 之 updateMany

MongoDB 之 updateMany

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

使用

MongoDB 之 updateMany

  • 在这里的 $set 只能把字段的value变成固定值,既 {field: value},没办法做过多转换
db.order.updateMany({"_id":"xxx"},{$set:{comment:"new comment"}});

updateMany 支持的 update operators

MongoDB 之 updateMany
MongoDB 之 updateMany
MongoDB 之 updateMany

这些支持了我们大部分的使用场景,但是如果我想更新一个字段的类型呢?

更新字段类型语句

先说结果,感兴趣可以继续看下去

db.order_configs.updateMany({ "_id": "xxx" }, [{ $set: { "price": { $toDouble: "$price" } } }]
);

另有玄机之 Aggregation pipeline

MongoDB 之 updateMany

Aggregation pipeline 中的 $set

MongoDB 之 updateMany

https://www.mongodb.com/docs/v6.0/reference/operator/aggregation/set/#definition

  • 可以看出来,这里的 $set 使用的是 { $set: { <newField>: <expression>, ... } }, 而不再是一个简单的value.

  • 我们再来看看 <expression>是什么?

    MongoDB 之 updateMany

这里有很多可操作的类型,就不枚举了。感兴趣看文档 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,$指当前文档

    MongoDB 之 updateMany

mongo的操作各式各样,感兴趣大家可以自行查看文档来寻找自己需要的功能