【问题标题】:Update field to transformed/mapped value of another field将字段更新为另一个字段的转换/映射值
【发布时间】:2021-12-10 17:10:36
【问题描述】:

我有一个集合,例如 FieldA(字符串)、FieldB(字符串)。我现在想更新整个集合,以便将FieldB 设置为将同一文档的FieldA 传递给转换函数的结果,即,如下所示:

updateMany({}, ['$set': {'FieldA': myTransform('$FieldB')}])

其中 myTransform 是一个 JavaScript 函数。在我的例子中,它只是将 FieldA 的字符串值转换为整数,以消除潜在的前导 0。

显然,这是行不通的:它只会使用常量参数“$myField”调用 myTransform,而不是当前文档中字段的实际值。

如何更改此查询以有效地 做我想做的事,即将当前考虑的文档的一个字段设置为同一文档上另一个字段的映射值?我是否必须编写两个查询,一个用于获取值,一个用于更新它们?

谢谢!

【问题讨论】:

    标签: javascript mongodb mapping


    【解决方案1】:

    您可以在聚合函数中将 js 函数替换为 $toInt。用$addFields 填充FieldA 后,使用$merge 更新回您的收藏。

    db.collection.aggregate([
      {
        "$addFields": {
          "FieldA": {
            $toInt: "$FieldB"
          }
        }
      },
      {
        "$merge": {
          "into": "collection",
          "on": "_id",
          "whenMatched": "replace"
        }
      }
    ])
    

    这里是Mongo playground 供您参考。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-01
      • 2013-09-07
      • 1970-01-01
      • 1970-01-01
      • 2011-04-27
      相关资源
      最近更新 更多