How to pull a array element (which is document) in mongodb?

mongodb

Solution

Try changing:

db.mytests.update({},{$pull:{'mylist':{'mylist.$.foo1':'bar1'}}})

to:

db.mytests.update({},{$pull:{'mylist':{'foo1':'bar1'}}})

Problem

Suppose the collection is like this: ``` db.mytests.find() { "_id" : ObjectId("4fb277b89b8295a790efde44"), "mylist": [ { "foo1" :"bar1", "foo2" : "bar2" }, {"foo1" : "bar3", "foo2" : "bar4" } ], "nonlist" : "nonlistVal" } ``` I want to remove a document in `mylist` whose `foo1` equal to `bar1`, after reading mongodb document about updating I used this: ``` db.mytests.update({},{$pull:{'mylist':{'mylist.$.foo1':'bar1'}}}) ``` but it failed. To figure out the problem I insert a new array into `mytests` using this: ``` db.mytests.update({},{$set:{'anotherList':[1,2,3,4]}}) ``` and then using `db.mytests.update({},{$pull:{'anotherList':{$gt:3}}})` to pull the element `4` in array `anotherList` ,it succeed. I supposed the problem is with the `mylist.$.foo1` ? Can you tell me the right way to remove a document element in a array?

Original source