Объект JavaScript ISODate хранит время в миллисекундах с 1 января 1970 года. Спецификация для класса JavaScript Date находится здесь: http://bclary.com/2004/11/07/#a-15.9 Из этой документации самая ранняя "допустимая" дата - 1 января 129 UTC,
d = новая дата («Пн, 01 янв. 0001, 00:00:00 GMT +00: 00») - недопустимый объект даты.Я считаю, что ошибка в JavaScript, а не в MongoDB.Различные версии оболочки MongoDB по-разному обрабатывают недопустимые даты:
В 1.6:
> d = new Date("Mon, 01 Jan 0001 00:00:00 GMT +00:00")
"Invalid Date"
В 1.8 и 2.0:
> d = new Date("Mon, 01 Jan 0001 00:00:00 GMT +00:00")
ISODate("0NaN-NaN-NaNTNaN:NaN:NaNZ")
В 2.1:
> d = new Date("Mon, 01 Jan 0001 00:00:00 GMT +00:00")
ISODate("2001-01-01T00:00:00Z")
Если создан «допустимый» объект даты, ваш запрос будет работать должным образом:
> db.time.save({ "end" : new Date("Fri, 31 Dec 9999 23:59:59 GMT +00:00"), "start" : new Date("Mon, 01 Jan 1970 00:00:00 GMT +00:00")})
> db.time.find({"start" : {"$lt" : new Date()}, "end": {"$gt" : new Date()}})
{ "_id" : ObjectId("4ed3fa4f89b8abdabefe1b5c"), "end" : ISODate("9999-12-31T23:59:59Z"), "start" : ISODate("1970-01-01T00:00:00Z") }
Все это, как отмечал mnemosyn, выглядит так, как будто была проблемас датами индексации в Mongod, которые теперь разрешены.Если возможно, вам следует обновить систему до версии 2.0+ и переиндексировать, если на датах есть старый индекс.