Конструктор Date
ожидает отметку времени в миллисекундах .Отметка времени 1285947037
указана в секундах , поэтому вы умножаете ее на 1000.
Я предполагаю, что фактическая отметка времени в документе содержит миллисекунды, например, 1285947037461
(обратите внимание на 461 в конце).Вы умножаете секунды на 1000, что приводит к 1285947037000
.Как видите, эти временные метки не равны:
1285947037461 // actual timestamp in MongoDB
1285947037000 // value you calculated
Проблема заключается в классе MongoDate
: он теряет точность в миллисекундах, как вы можете прочитать в документации ,Вот цитата:
[...] это означает, что любая точность, превышающая миллисекунды, будет потеряна при отправке документа в / из базы данных.
Найтидокумент, который вы ищете, используя метку времени в секундах, вам нужно что-то вроде этого:
db.foo.findOne(function () {
// round the stored date to seconds and compare to timestamp
return parseInt(this.date / 1000) === 1285947037
})
Вы можете получить точную метку времени в миллисекундах в консоли, используя myDateObject.getTime()
.