Почему запрос Mongo и запрос драйвера Java Mongo дают мне очень разные результаты?
Почему эти запросы дают мне очень разные результаты?
Монго версия:
db.journeydata.find({"$or" : [{"Start Date" : {'$gte' : ISODate("2015-07-01T00:00:00Z"), '$lte' : ISODate("2015-07-01T01:00:00Z")}},
{"End Date" : {'$gte' : ISODate("2015-07-01T00:00:00Z"), '$lte' : ISODate("2015-07-01T01:00:00Z")}}]}).count()
Версия Java:
BasicDBObject c1 = new BasicDBObject();
c1.put("Start Date", BasicDBObjectBuilder.start("$gte", fromDate).add("$lt", toDate).get());
BasicDBObject c2 = new BasicDBObject();
c2.put("End Date", BasicDBObjectBuilder.start("$gte", fromDate).add("$lt", toDate).get());
BasicDBList or = new BasicDBList();
or.add(c1);
or.add(c2);
DBObject query = new BasicDBObject("$or", or);
final DBCursor dbCursor = journeyColl.find(query);
final List<DBObject> journeyDBObject = dbCursor.toArray();
final List<Journey> journeyList = new ArrayList<Journey>(journeyDBObject.size());
for (int i = 0; i < journeyDBObject.size(); i++){
final DBObject dbObject = journeyDBObject.get(i);
final Journey journey = createJourney(dbObject);
journeyList.add(journey);
}
Где, fromDate и toDate являются экземплярами Java.Util.Date. Я понятия не имею, почему запросы дают мне разные результаты. Они должны дать мне тот же результат. Какие-либо предложения?
-- РЕДАКТИРОВАТЬ:
Вот что мне дает профилировщик Монго:
query:{
"$or" : [
{
"Start Date" : {
"$gte" : ISODate("2015-06-30T23:00:00Z"),
"$lt" : ISODate("2015-07-01T00:00:00Z")
}
},
{
"End Date" : {
"$gte" : ISODate("2015-06-30T23:00:00Z"),
"$lt" : ISODate("2015-07-01T00:00:00Z")
}
}
]
}
Я понятия не имею, почему даты изменились? Как я могу избежать этого?
-- РЕДАКТИРОВАТЬ:
Вот как я генерирую даты, я не устанавливаю часовой пояс:
final String begin = "2015-7-1T00:00:00.000Z";
final String end = "2015-7-31T00:00:00.000Z";
final DateTimeFormatter parser = ISODateTimeFormat.dateTime();
final DateTime beginDateTime = parser.parseDateTime(begin);
final DateTime endDateTime = parser.parseDateTime(end);
--- РЕДАКТИРОВАТЬ:
final DateTimeFormatter parser = ISODateTimeFormat.dateTime().withZone(DateTimeZone.UTC);
Установка часового пояса решила проблему.
Благодарю.