2014-05-17 2 views
0

mongodb에 날짜와 시간 문자열을 별도로 저장하는 컬렉션이 있습니다. "2014년 5월 16일" 시간 : 각 문서가 thisLmongodb에 문자열로 저장된 시간을 쿼리하는 중

일처럼 보인다 "11시" 코치 : { coachId "15b62940-1df8-42df-a30e-d52f4169c9f8" coachName : "XXXXXX xxxxx는" coachPhone : "(XXX) XXX-XXXX" }, _id "53766924d95930406a3d5b4e"

내가 노드 JS 클라이언트를 형성 범위 특정 시간 내에 문서를 찾고 있어요 경우 무슨 최고 그것을하는 방법. 이것은 쿼리 시간에 할 수 있습니까? $ lte, $ get 등등 연산자가 작동하도록 다른 형식으로 날짜와 시간을 저장해야합니까 감사합니다.

+1

잘 작동 사용할 수 있습니다 : // WWW를 .kamsky.org/stupid-tricks-with-mongodb/문자열과 함께 그룹화/집계 할 수있는 방법으로 문자열을 변환하는 방법을 보여주는 문자열입니다. 방금 검색 중이거나 데이터를 처리하거나 집계해야합니까? –

+0

하루에 관계없이 시간 범위를 의미합니까? 그렇다면 'Time'이 24H 형식 인 한'$ lte' 등을 사용하여'Time'을 간단히 필터링 할 수 있습니다. – JohnnyHK

답변

0

두 문자열의 형태로 특정 시점을 추상화하면 인생을 비참하게 만들고 있습니다. 특히 알파벳 정렬이 작동하지 않는 미국 날짜 형식을 사용할 경우.

MongoDB에서 특정 시점을 작업 할 때마다 the building Date 유형을 사용해야합니다. NodeJS에서이 유형은 Javascript Date 유형에 직접 매핑됩니다. 보통의 toString()보다 읽기 쉬운 형식으로 날짜를 포맷해야하는 경우 프론트 엔드에서 쉽게 수행 할 수 있습니다.

데이터베이스 계층에서 BSON 날짜를 사용하면 sort을 날짜별로 사용하고 date-based query operators을 집계 할 수 있습니다.

그런 식으로 유지하려고하면 $where-query을 사용하여 날짜 문자열과 시간 문자열을 javascript Date 개체로 변환 한 다음 날짜 연산을 수행 할 수 있습니다. 이 방법이 효과가있을 수 있지만 날짜를 날짜로 저장하면 안되는 매우 느리고 못생긴 해결책이 될 것입니다.

+0

아니요! 아니 $! :) 어쨌든 집합 프레임 워크를 대신 사용하는 것은 어떻습니까? 필드를 사용할 수있는 양식으로 변환 할 수 있습니다. –

+0

@AsyaKamsky 집계 프레임 워크가 여기 도움이 될 것이라고 생각하지 않습니다. 집계 날짜 연산자는 날짜에서 정보를 추출하고 날짜로 산술을 수행 할 수 있지만 비트와 정보로 새 날짜를 만들 수는 없습니다. – Philipp

+0

무엇을 의미합니까? 물론 그들은 할 수있다! –

0

나는 Philipp의 추천에 따라 문제를 해결할 수있었습니다. 데이터를 저장하는 클라이언트 컨트롤러에서 Date 형식으로 보냈습니다. 다른 클라이언트가 날짜를 기반으로 검색을 수행

{DateUTC: "2014-05-20T15:30:00.000Z"} 

, 난을 보내

var dateString = $('#datetimepicker').val(); 
var date = new Date(dateString); 
$scope.AvailDates.push({DateUTC:**date**}); 

AvailDates

는이 몽고 날짜 형식으로로 저장됩니다 내 MongoDB를 저장하는 HTTP 게시를 통해 전송됩니다 구원의 클라이언트와 같은 형식으로 날짜를 입력 한 다음 그것을()는 .toISOString을 수행

var inputUTCDate =new Date(req.params.datetime); 

데이터베이스 검색을 전송, 내가 이렇게 :

inputUTCDate에
collection.find({DateUTC:{$gte:inputUTCDate.toISOString()}).toArray(function(err, items) {} 

, 나는 시간 범위를 필요로하는 경우 시간을 빼기/추가하고 $ 얻고 $ LTE 사업자 및 그들은 내가 오늘 아침에 http를 발표 놀라운 우연의 일치로

관련 문제