You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB中如何基于另一嵌入文档的字段运算结果更新指定字段

MongoDB嵌入式数组字段运算更新方案

你原有代码存在两处需要修正的点:

  • $set配置的目标更新字段为test,因此只会更新test字段,需将目标字段改为statistic.crypt
  • 直接使用$inventory.farm.$[].col会返回所有farm元素的col值组成的数组,无法精准提取id为12的farm对应的col值,需要搭配$filter做过滤提取

正确实现代码

self.collection.update_many(
    {"inventory.farm.id": 12},
    [
        {
            "$set": {
                "statistic.crypt": {
                    "$toDouble": {
                        "$sum": [
                            "$statistic.crypt",
                            {
                                "$multiply": [
                                    # 过滤匹配id=12的farm,取col值,匹配失败默认返回0
                                    {"$ifNull": [
                                        {"$getField": {
                                            "field": "col",
                                            "input": {"$first": {"$filter": {
                                                "input": "$inventory.farm",
                                                "cond": {"$eq": ["$$this.id", 12]}
                                            }}}
                                        },
                                        0
                                    ]},
                                    0.025
                                ]
                            }
                        ]
                    }
                }
            }
        }
    ]
)

逻辑说明

  1. 用$filter遍历inventory.farm数组,筛选出id等于12的元素
  2. 用$first取筛选结果的第一个匹配元素,搭配$getField提取该元素的col字段值,通过$ifNull兜底匹配失败的场景默认返回0
  3. 将提取到的col值乘以0.025得到增量值
  4. 把增量值和原有statistic.crypt的值相加后,用$toDouble转换为双精度类型
  5. 最终将计算结果写入statistic.crypt字段完成更新

内容的提问来源于stack exchange,提问作者Ice_One

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 04:42:01