使用嵌套字段中的值更新字段

Posted

技术标签:

【中文标题】使用嵌套字段中的值更新字段【英文标题】: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

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

【问题讨论】:

【参考方案1】:

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

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

Playground

【讨论】:

以上是关于使用嵌套字段中的值更新字段的主要内容,如果未能解决你的问题,请参考以下文章

嵌套 Rails 表单中的动态值未更新

BigQuery UPDATE 嵌套数组字段

MongoDB - 基于嵌套数组的字段值更新数组对象中的字段

ReactJS:仅更新嵌套状态对象中的特定字段[重复]

更新 BigQuery 表中的嵌套字段

更新嵌套 Angular 2 组件中的数字字段值