【问题标题】:Update field with value from a nested field使用嵌套字段中的值更新字段
【发布时间】:2021-09-19 01:41:30
【问题描述】:

我知道我可以在 update 中使用管道聚合器来用另一个字段的值更新一个值的字段。但是,我的问题是根据嵌套字段的值更新字段值时。更新的结果总是发出带有括号的新字段。我不想要括号/数组,我只想让它成为一个值。请参阅下面的代码 https://mongoplayground.net/p/7ZDP8CYtKK3

db={
 "players": [
   {
     "_id": ObjectId("5fba17c1c4566e57fafdcd7e"),
     "username": "moshe",
     "health": 0,
     "maxHealth": 200,
     "Chapters": [
       {"Cat A": 25,
        "Cat B": 100,
        "Cat C": 125}]
   }
 ]
}

这是我在下面应用的查询

db.players.update(
{username: "moshe"},
[{"$set": {"health": "$Chapters.Cat A"}}]
)

结果产生

[{"Chapters": [
      {"Cat A": 25,
       "Cat B": 100,
       "Cat C": 125}],

    "_id": ObjectId("5fba17c1c4566e57fafdcd7e"),
    "health": [25],
    "maxHealth": 200,
    "username": "moshe"
  }]

我想要的是健康更新显示不带数组括号......"health":25

这又是一个基于我正在使用的更大数据库的示例。

【问题讨论】:

    标签: arrays mongodb nested aggregation-framework pymongo


    【解决方案1】:

    您可以使用$arrayElemAt$first(v4.4) 运算符从数组中选择第一个元素,

    db.players.update(
      { username: "moshe" },
      [{ 
        "$set": { 
          "health": {
            "$arrayElemAt": ["$Chapters.Cat A", 0]
          }
        } 
      }]
    )
    

    Playground

    【讨论】:

      猜你喜欢
      • 2021-08-29
      • 2015-03-05
      • 1970-01-01
      • 2021-04-14
      • 2021-09-29
      • 2021-01-10
      • 2018-01-14
      • 2013-02-20
      • 1970-01-01
      相关资源
      最近更新 更多