MongoDB:按条件更新字段聚合

gv8xihay  于 2022-12-03  发布在  Go
关注(0)|答案(1)|浏览(209)

请告诉我如何在聚合中更新带条件的字段?

[{_id:"1",val:"admin",...},{_id:"2",val:'employee',...},{_id:"3",val:"admin",...},...]

新数据:“管理员-en”、“雇员-en”

Collection.aggregate([{
  $project: {
   $cond: {
 if: {$eq:"admin"},
then: {$set:"admin-en"},
if: {$eq:"employee"},
then: {$set: "employee-en"}
}
 }
}])

我很可能做错了什么。也许有其他方法可以使用聚合来更新具有条件的字段

q8l4jmvw

q8l4jmvw1#

不能在aggregate查询中更新,但可以在update查询中使用聚合阶段。请选中Updates with Aggregation Pipeline
顺便说一句,我不确定我是否理解正确,但也许你只需要这个查询:

db.collection.update({},
[
  {
    "$set": {
      "val": {
        "$concat": [
          "$val",
          "-en"
        ]
      }
    }
  }
],
{
  "multi": true
})

例如here
但是,如果你想使用if/else语句,你可以尝试使用$switch(即if/else结构):

db.collection.update({},
[
  {
    "$set": {
      "val": {
        "$switch": {
          "branches": [
            {
              "case": {
                "$eq": [
                  "$val",
                  "admin"
                ]
              },
              "then": "admin-en"
            },
            {
              "case": {
                "$eq": [
                  "$val",
                  "employee"
                ]
              },
              "then": "employee-en"
            }
          ],
          "default": "$val"
        }
      }
    }
  }
],
{
  "multi": true
})

例如here
同样只使用if/else的例子是here
请注意:

  • 第一个示例将更新所有$val
  • 第二个和第三个示例将只更新值为“admin”或“employee”的$val

相关问题