2016-09-13 2 views
2

웹 서버에서 Node.js와 Express를 사용하여 dbserver에서 MongoDB를 쿼리하고 함께 작동하는 데 문제가 발생하면 여기 문제에 대한 스레드의 무리, 특히이 하나Node.js, Express 및 MongoDB를 사용하여 ISODate로 찾기

Inserting and Querying Date with MongoDB and Nodejs

나는 내가이 일을하기로되어있어 이해 확신 해요,하지만 난 시도 아무것도 작동하는 것 같다 없습니다. 내의 .js 파일에서

, 나는 다음과 같은 한 : 콘솔에

var todayStart = new Date(); 
todayStart.setSeconds(0); 
todayStart.setHours(0); 
todayStart.setMinutes(0); 
todayStart.setMilliseconds(0); 

var todayEnd = new Date(todayStart); 
todayEnd.setHours(23); 
todayEnd.setMinutes(59); 
todayEnd.setSeconds(59); 
todayEnd.setMilliseconds(999); 

var query = { 
    "date": { 
     $gte: new Date(todayStart).toISOString(), 
     $lte: new Date(todayEnd).toISOString() 
    } 
}; 

내 쿼리 VAR 출력을 형식으로 내가 기대 :

{ date: 
    { '$gte': '2016-09-13T00:00:00.000Z', 
    '$lte': '2016-09-13T23:59:59.999Z' } 
} 

가 나도 내 쿼리 변수를 사용하려고 또는 날짜 자신을 바르, 모두가 null의 결과 (오류없이) 반환 : 그러나

db.collection('test').findOne(query, function(err, result) { 
db.collection('test').findOne({"date" : {$gte: new Date(todayStart).toISOString(),$lte: new Date(todayEnd).toISOString() }}, function(err, result) { 

을 그냥 페이지의 경우 내 날짜의 러그는 그렇듯이 내 결과를 반환합니다.

db.collection('test').findOne({"date" : {$gte: new Date("2016-09-13T00:00:00.000Z"),$lte: new Date("2016-09-13T23:59:59.999Z") }}, function(err, result) { 

내가 여기에없는 것이 있습니까?

답변

2

날짜를 ISO 문자열 형식으로 변환 할 필요가 없습니다. JS 날짜를 사용하여 쿼리하면됩니다. 이유에 대한 자세한 내용은 documentation을 참조하십시오.

00에서 현재 날짜 시간 시간을 보유해야 시작일 개체 : 00 : 00.000 (밀리 초 정밀도) 및 (23)에 오늘 날짜의 시간을 설정합니다

var todayStart = new Date(); 
todayStart.setHours(0,0,0,0); 

var todayEnd = new Date(); 
todayEnd.setHours(23,59,59,999); 

var query = { 
    "date": { 
     $gte: todayStart, 
     $lte: todayEnd 
    } 
}; 

db.collection('test').findOne(query, function(err, result) { 
    if (err) throw new Error(); 
    console.log(JSON.stringify(result)); 
}); 
: 종료 날짜 변수에 59.999 : 59

: 당신이 momentjs 라이브러리를 사용하는 경우

, 이것은 인수로 문자열 '일'을 통과하는 순간의 현재 날짜 개체에 startOf()endOf() 방법을 사용하여 수행 할 수 있습니다 당신은 isodate을 사용할 수 있습니다

var todayStart = moment().startOf('day'); // set to 12:00 am today 
var todayEnd = moment().endOf('day'); // set to 23:59 pm today 
+1

감사합니다 톤. 나는 그것을 분명히 지나치게 복잡하게 만들고 있었다. 매력처럼 일했습니다. –

+1

@NickSchroeder 걱정하지 않아도됩니다. – chridam

0

,

var isodate = require('isodate'); 



var query = { 

"date" : { 
       '$gte' : isodate(todayStart), 
       '$lt' : isodate(todayEnd) 
      } 
}; 
관련 문제