Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Remove an entry from array using MongoDB-Java driver

I have JSON like :

{ 
    "_id" : "1",
    "_class" : "com.model.Test",
    "itemList" : [
        {
            "itemID" : "1",
            "itemName" : "Foo",
            "resources" : [ 
                { 
                    "resourceID" : "1",
                    "resourceName" : "Foo Test1"
                 }, {
                    "resourceID" : "2",
                    "resourceName" : "Foo Test2"
                 }
             ]
        }
    ]
}

I need to be able to remove one of records of itemList. I have done the following:

public void removeItemByID(String docID, String itemID) throws Exception {
    MongoOperations mongoOperations = mongoConfiguration.getMongoTemplate();
    Query query = new   Query(where("_id").is(docID).and("itemList.itemID").is(itemID));
    mongoOperations.remove(query, Item.class);

}

This approach doesn't work. However when I have used the BasicDBObject with $pull approach it works fine ! What's the difference among these approaches !

like image 873
Echo Avatar asked Apr 10 '12 22:04

Echo


People also ask

How do I remove an entry 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 you delete a record in MongoDB Java?

You can delete a single document from a collection using the deleteOne() method on a MongoCollection object. The method accepts a query filter that matches the document you want to delete. If you do not specify a filter, MongoDB matches the first document in the collection.

How do I edit an array in MongoDB?

Learn how to update array fields in documents in MongoDB collections. You can use the updateOne() or updateMany() methods to add, update, or remove array elements based on the specified criteria. It is recommended to use the updateMany() method to update multiple arrays in a collection.


1 Answers

If you want to remove an array generally I use the following:

BasicDBObject match = new BasicDBObject("_id", "1"); // to match your document
BasicDBObject update = new BasicDBObject("itemList", new BasicDBObject("itemID", "1"));
coll.update(match, new BasicDBObject("$pull", update));
like image 160
dash1e Avatar answered Oct 20 '22 22:10

dash1e