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

使用

image

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

image
image
image

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

更新字段类型语句

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

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

另有玄机之 Aggregation pipeline

image

Aggregation pipeline 中的 $set

image

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

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

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

    image

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

    image

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值