2
{
    "partners" : [
        {
            "partnerId" : 5,
            "topicIds" : [
                "59de26f2e4b0f263704769e5"
            ]
        },
        {
            "partnerId" : 45,
            "topicIds" : [
                "alpha",
                "beta"
            ]
        },
        {
            "partnerId" : 12345,
            "topicIds" : [
                "alpha"
            ]
        }
    ]
}

I want to pull certain topicIds from specified partners. So for example I want to pull alpha topic from partnerId = 45 (the entry should remain with topicIds = ["beta"]).

I tried:

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

however this removes the entire partnerId = 45 entry. I will have a single partnerId value and multiple topicIds to pull.

sudeepdino008
  • 3,194
  • 5
  • 39
  • 73
  • Try `{$pull:{"partners.topicIds":{"partnerId":45, "topicIds":{"$in":["alpha"]}}}}` – Héctor Nov 06 '17 at 15:05
  • ```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\" ] } ]})" } })``` – sudeepdino008 Nov 06 '17 at 15:20
  • Check this: https://stackoverflow.com/questions/5228210/how-to-remove-an-element-from-a-doubly-nested-array-in-a-mongodb-document Specially, the last answer – Héctor Nov 06 '17 at 15:23

1 Answers1

0

instead of

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

use

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

this is an update query so you can specify in the first {} a certain document or array element to operate on

frod_junior
  • 115
  • 2
  • 13