2016-04-16 12 views
2

1日に作成されたすべてのドキュメントの検索結果を返そうとしています。以下は、私が使用するクエリです。Query by Date not working

var query = Document.find({}).populate('contacts'); 
var gte = moment(req.query.date, 'DD-MM-YYYY').startOf('Day'); 
var lte = moment(req.query.date, 'DD-MM-YYYY').endOf('Day'); 
query.where('dates.createdAt').gte(gte).lt(lte); 

このクエリは、一部の日に機能しますが、すべてではありません。私はその行動を理解していないようです。助けてください。

クエリ文字列内の日付の書式はDD/MM/YYYYです。用

作品: は動作しません2016-04-16T00:02:30.065Z2016-04-15T19:02:59.758Z

答えて

2

それはあなたが.utc()として初期化されませんので、間違っている、とのMongoDB日付がUTCに格納されます。

var gte = moment.utc(req.query.date, 'DD-MM-YYYY'); 
var lte = moment.utc(req.query.date, 'DD-MM-YYYY').endOf('Day'); 

そして必要はありませんstartOf()のいずれかです。

このように構成しないと、結果のDateオブジェクトはローカルタイムゾーンの違いによって歪められます。それで、なぜあなたは時間が日付の上で交差するか選択作業が見えないのですか?

また、日付が01/01/2016である場合、フォーマット文字列は'DD/MM/YYYY'になりますが、どちらか一方があなたの質問の誤字かもしれません。