2014-06-20 1 views
1

FindOne 문에 날짜 범위를 사용하여 MongoDb를 쿼리하려고하는데 작동하지 않습니다. Nodejs 기본 드라이버를 사용하고 있습니다. 다양한 옵션을 시도했지만 예상되는 레코드를 반환하는 것은 없습니다. 여기 FindOne (Nodejs 기본 드라이버를 통해)을 사용하여 기간별로 MongoDb 쿼리

내 의사 코드 - =======

enter image description here

- 예상대로 내가 RoboMongo이를 실행하는 경우, 그러나

console.log(sDate);     // displays Fri Jun 20 2014 10:00:00 GMT+1000 (AUS Eastern Standard Time) 
var sDateISO = sDate.toISOString(); 
console.log(sDateISO);     // displays 2014-06-20T00:00:00.000Z 

// all of these return null object 
db.collection('events').findOne(
    { eventStartDate: { $lte: new Date(sDate)}}, 
    function(err, obj) { console.dir(obj); }  // displays null 
); 

db.collection('events').findOne(
    { eventStartDate: { $lte: (sDate) }}, 
    function(err, obj) { console.dir(obj); }  // displays null 
); 

db.collection('events').findOne(
    { eventStartDate: { $lte: new Date(sDateISO) }}, 
    function(err, obj) { console.dir(obj); }  // displays null 
); 

db.collection('events').findOne(
    { eventStartDate: { $lte: (sDateISO) }}, 
    function(err, obj) { console.dir(obj); }  // displays null 
); 

레코드가 반환된다 ===

UPDATE

,

내 코드에서 다른 곳에서 문제가 발생했습니다 - FindOne 쿼리에 전달 된 별도의 매개 변수에서 형식 불일치 문제가 발생했습니다. documentation에 명시된, 아래 Christian P에 의해 확인 된

, 내가 직접 FindOne 쿼리에서 내 자바 스크립트 날짜 개체 sDate를 사용할 수 있습니다.

이 실제로 Date 객체인지 확인하기 위해 typeOf 함수 (찾은 here)를 사용했습니다.

실제 코드에서 다른 모든 변수를 검사 한 후에 Date 개체/매개 변수와 관련이없는 다른 곳에서 문제가 발견되었습니다.

답변

1

ISODate은 MongoDB 쉘의 Date 오브젝트에 대한 랩퍼입니다. Robomongo는 mongo 셸과 동일한 JavaScript 엔진을 내장하므로 RoboMongo에서 쿼리가 작동합니다.

db.collection('events').findOne(
    { eventStartDate: { $lte: sDate}}, 
    function(err, obj) { 
     console.dir(obj); 
    } 
); 
:

는 단순히 쿼리에 Date 객체를 사용할 수있는 날짜 범위를 조회하려면
관련 문제