Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using MongoDB $pull to delete documents within an Array

Tags:

I have a collection in MongoDB, which is like following:

{     "_id" : "5327010328645530500",     "members" : [         {             "participationCoeff" : 1,             "tweetID" : "5327010328645530500"         },         {             "participationCoeff" : 1,             "tweetID" : "2820402625046999289"         },         {             "participationCoeff" : 0.6666666666666666,             "tweetID" : "6122060484520699114"         },         {             "participationCoeff" : 1,             "tweetID" : "4656669980325872747"         }     ] } {     "_id" : "2646953848367646922",     "members" : [         {             "participationCoeff" : 1,             "tweetID" : "2646953848367646922"         },         {             "participationCoeff" : 0.75,             "tweetID" : "7750833069621794130"         },         {             "participationCoeff" : 0.5,             "tweetID" : "6271782334664128453"         }     ] } 

Basically, collection have clusters, where a cluster has an _id field and a members field. Members field is an array of documents, having following format.

{             "participationCoeff" : 1,             "tweetID" : "5327010328645530500"         } 

Now, from time to time, I have to delete these sub-documents in members attribute of cluster document, by matching tweetID.

However, I'm not able to find a query to achieve this effect. Basically, a tweetID will participate in many clusters, and hence will appear in multiple sub-documents of 'members' attribute of various clusters. I want to supply a bulk $pull operation, where I can remove all the sub-documents in all the clusters (i.e. their members attribute) which match on a particular tweetID.

Some help and intuition will be really helpful.

like image 738
VaidAbhishek Avatar asked Feb 27 '13 20:02

VaidAbhishek


People also ask

How do you delete an element from an array in MongoDB?

To remove an element, update, and use $pull in MongoDB. The $pull operator removes from an existing array all instances of a value or values that match a specified condition.

How do I delete a nested file in MongoDB?

To remove an element from a doubly-nested array in MongoDB document, you can use $pull operator. Now field "UserZipCode": "20010" has been removed from a doubly-nested array.


1 Answers

That's exactly what the $pull operator does, so in the shell you could use an update like:

db.clusters.update({},      {$pull: {members: {tweetID: '5327010328645530500'}}},      {multi: true}) 

Set the multi option so that every document is updated, not just the first one.

like image 119
JohnnyHK Avatar answered Oct 19 '22 04:10

JohnnyHK