I already can execute the desired query on mongoshell, but i need to make the same query using Java and MongoOperations.
I have checked this question, which is very similar, but it only has one condition, as mine has two and uses the $gte and $lt operators. Here's the working mongo Query:
db.getCollection('example').update({"idVar": "desiredValued"}, { $pull: { "listaHoras": { $gte: ISODate("2016-11-06T05:50:00.000Z"), $lt: ISODate("2016-11-06T06:30:00.000Z")}}}) Sample doc:
"_id" : ObjectId("58221b4610a3c71f1894ce75"), "idVar" : "56b11259272f5515b05d70bc", "date" : ISODate("2016-11-06T03:00:00.000Z"), "listaHoras" : [ ISODate("2016-11-06T05:40:00.000Z"), ISODate("2016-11-06T06:30:00.000Z"), ISODate("2016-11-06T06:40:00.000Z") ] Where i'll have the ISODATE as a Date variable in Java, and the desiredValue as a String variable.
So far, i have i did the following, using the previously mentioned question as example:
BasicDBObject match = new BasicDBObject("idVar", desiredValue); // to match your document BasicDBObject update = new BasicDBObject("listaHoras", new BasicDBObject("itemID", "1")); coll.update(match, new BasicDBObject("$pull", update)); But, as you can see, this is NOT equivalent to the desired query. Since the match for the $pull is matching "itemID"with "1". I do not know, nor was i able to find how to properly use the $gte and $lt on the same query. Neither on how to use just one or both of them. I know it CAN be done as seen on the MongoOperatioons API which says:
"update - the update document that contains the updated object or $ operators to manipulate the existing object."
Anyone knows how it can be done? And if the Date type in Java matches the ISODATE on the Mongo?