Почему запрос 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);

Установка часового пояса решила проблему.

Благодарю.

0 ответов

Другие вопросы по тегам