猿问

如何迭代 mongo db 文档并更新嵌套数组

我需要删除mongodb中2d文档结构数组中的条目。


示例如下


{

    "_id" : ObjectId("5ffef283f1f06ff8524aa2c2"),

    "applicationName" : "TestApp",

    "pName" : "",

    "environments" : [],

    "stages" : [],

    "createdAt" : ISODate("2021-01-15T09:51:35.546Z"),

    "workflows" : [ 

        [ 

            {

                "pName" : "Test1",

                "wName" : "TestApp_Test1",

                "agent" : ""

            }, 

            {

                "pName" : "Test2",

                "wName" : "TestApp_Test2",

                "agent" : ""

            }

        ], 

        [ 

            {

                "pName" : "Test1",

                "wName" : "TestApp_Test1",

                "agent" : ""

            }

        ]

    ],

    "updatedAt" : Date(-62135596800000)

}

因此,我想删除所有文档事件


{

  "pName" : "Test1",

  "wName" : "TestApp_Test1",

  "agent" : ""

}

从两个数组。


pName:Test1 可用于将其过滤掉。


可用于查找此内容并将其删除的查询是什么?


我可以做一个查找,然后循环访问集合,找到匹配的条目,然后更新文档。我必须使用Go mongodb驱动程序执行此操作


由于这对我来说有点复杂,因为我是golang和mongo db的新手,所以我被困住了。


更新:1.按照建议在 update() 调用中尝试,但不起作用。{$pull: {workflows: {pName:"Test1"}}}, {multi: true}


2.尝试过类似的东西


db.getCollection('workflows').update({_id:ObjectId('5ffef283f1f06ff8524aa2c2')}, {$pull:{workflows: { $elemMatch: {pName:'Test2'}}}} )

这将删除整个数组,如下所示,因为 Test2 存在于其中。我只需要删除 Test2 文档


    {

        "pName" : "Test1",

        "wName" : "TestApp_Test1",

        "agent" : ""

    }, 

    {

        "pName" : "Test2",

        "wName" : "TestApp_Test2",

        "agent" : ""

    }

]


SMILET
浏览 103回答 1
1回答

慕标5832272

我会给你一个提示,因为你是新手,你还没有发布尝试过的东西。您可以使用 来删除符合条件的文档。$pull类似示例你可以使用官方的mongodb驱动程序进行go或最常用的gopkg示例 SO 帖子
随时随地看视频慕课网APP

相关分类

Go
我要回答