【问题标题】:pull from mongo nested array从 mongo 嵌套数组中拉取
【发布时间】:2018-04-18 18:53:37
【问题描述】:
{
    "partners" : [
        {
            "partnerId" : 5,
            "topicIds" : [
                "59de26f2e4b0f263704769e5"
            ]
        },
        {
            "partnerId" : 45,
            "topicIds" : [
                "alpha",
                "beta"
            ]
        },
        {
            "partnerId" : 12345,
            "topicIds" : [
                "alpha"
            ]
        }
    ]
}

我想从指定的合作伙伴那里提取某些 topicId。 例如,我想从 partnerId = 45 中提取 alpha 主题(条目应保留为 topicIds = ["beta"])。

我试过了:

db.mypartnercoll.update({}, {$pull:{"partners":{"partnerId":45, "topicIds":{"$in":["alpha"]}}}})

但是,这会删除整个 partnerId = 45 条目。我将有一个 partnerId 值和多个 topicId 来拉取。

【问题讨论】:

  • 试试{$pull:{"partners.topicIds":{"partnerId":45, "topicIds":{"$in":["alpha"]}}}}
  • WriteResult({ "nMatched" : 0, "nUpserted" : 0, "nModified" : 0, "writeError" : { "code" : 16837, "errmsg" : "cannot use the part (partners of partners.topicIds) to traverse the element ({partners: [ { partnerId: 5.0, topicIds: [ \"59de26f2e4b0f263704769e5\" ] }, { partnerId: 45.0, topicIds: [ \"alpha\", \"beta\" ] }, { partnerId: 12345.0, topicIds: [ \"alpha\" ] } ]})" } })
  • 查看这个:stackoverflow.com/questions/5228210/… 特别是最后一个答案

标签: arrays database mongodb aggregate


【解决方案1】:

而不是

db.mypartnercoll.update({}, {$pull:{"partners":{"partnerId":45, "topicIds":{"$in":["alpha"]}}}})

使用

db.mypartnercoll.update({"partners.$.partnerId":"yourdesired_partnerId"}, 
{$pull:{"partners":{"partnerId":45, "topicIds":{"$in":["alpha"]}}}})

这是一个更新查询,因此您可以在第一个 {} 中指定要操作的某个文档或数组元素

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-14
    • 2020-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-01
    • 1970-01-01
    相关资源
    最近更新 更多