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

MongoDB how to change field type in array from string to array and keep original value

原图 document

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

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

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

Outcome

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

查询

  • $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})