0

I'm building my query like this:

Date date = new Date();
Criteria criteria = Criteria
    .where("metadata.value.digitalitzacio.dataDigitalitzacio")
    .is(new Date(2018,10,10));

this.mongoTemplate.find(Query.query(criteria));

It builds this query:

Query: { "metadata.value.digitalitzacio.dataDigitalitzacio" : { "$date" : 61499948400000 } }

So, it fails.

It sends query as an $date long, instead of an ISODate.

I mean, metadata.value.digitalitzacio.dataDigitalitzacio is stored as a ISODate into collection:

{
    "_id" : "cpd4-175ec7f0-d70f-4b63-a709-69918d98c4f2",
    "metadata" : [
        {
            "user" : "RDOCFO",
            "value" : {
                "digitalitzacio" : {
                    "csvDigitalitzacio" : "eeeeeeeeee",
                    "dataDigitalitzacio" : ISODate("2018-10-10T00:00:00Z"),
                    "empleatDigitalitzacio" : "empleat-digitalitzacio"
                }
            }
        }
    ]
}

But it's queried as a $date long. How vould I solve that?

Jordi
  • 20,868
  • 39
  • 149
  • 333

1 Answers1

-1

From https://stackoverflow.com/a/30294522/9731186, the following code should work, I didn't tested it though. java.util.Date(int, int, int) is now deprecated.

String string_date = "10-10-2018";
SimpleDateFormat f = new SimpleDateFormat("dd-MM-yyyy");
Date d = new Date();
try {
    d = f.parse(string_date);
    long milliseconds = d.getTime();
} catch (ParseException ex) {
    ex.printStackTrace();
}
  Criteria criteria = Criteria
    .where("metadata.value.digitalitzacio.dataDigitalitzacio")
    .is(d);
}
  this.mongoTemplate.find(Query.query(criteria));
}
charlycou
  • 1,778
  • 13
  • 37