MongoDB如何将数组中的字段类型从字符串更改为数组并保持原始值

Posted

技术标签:

【中文标题】MongoDB如何将数组中的字段类型从字符串更改为数组并保持原始值【英文标题】:MongoDB how to change field type in array from string to array and keep original value 【发布时间】:2022-01-07 14:08:37 【问题描述】:

原图 document

我有带有集合“测试”的数据库“测试”。在该集合中,我有一个名为“方法”的数组的文档,其中包含对象 0(可能还有更多对象 1、2、3、4 ...)。在这些对象中,我有带有工具“xray”的字符串字段“工具”。我希望该字符串字段“工具”成为工具数组。我找到了将工具字段更改为数组的命令:

db.testing.update(
  ,
  [ $set:  "methods.tool": ["$methods.tool"]  ],
   multi: true 
)

这可行,但它会创建一个额外的数组“0:Array”,我不想要那个

Outcome

我希望最终结果如下所示: end result

【问题讨论】:

请注意,如果“methods”数组包含多个元素,则不会按您预期的方式工作。 如果你下次可以用文本JSON提供数据,那就容易多了,不要为可以使用文本的东西发送图像,这样人们可以测试你的数据并给你一个查询. 【参考方案1】:

查询

$map 更新方法的所有文档成员 $$this每次都是当前会员 $mergeObjects 用于添加更新的字段,由tool:xray 变为tool : [xray]

*该字段是数组一部分的路径,它们也是数组,“$methods.tool”是所有方法中所有工具的数组。

Test code here

update(
,
["$set": 
    "methods": 
      "$map": 
        "input": "$methods",
          "in": "$mergeObjects": ["$$this", "tool": ["$$this.tool"]]],
"multi": true)

【讨论】:

以上是关于MongoDB如何将数组中的字段类型从字符串更改为数组并保持原始值的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery:如何将我的一列的类型从 INTEGER 更改为 STRING?

MongoDB,将对象数组更改为包含其 ObjectId 的字符串数组

如何将 MongoDB 集合中的 _id 字段更改为 User_id?

如何使用 javascript var 引用 Mongodb 集合字段

协议缓冲区:将字段类型从字符串更改为字符串值向后兼容?

如何在不丢失 Xampp 中的数据的情况下将类型从 varchar 更改为 Date