2013-05-25 1 views
9

시나리오 : 나는 다음과 같은 데이터로, MyCollection라는 컬렉션을 데 고려는 :문자열 필드에 ISO 날짜가 저장된 MongoDB 컬렉션에서 날짜 범위를 쿼리하는 방법은 무엇입니까?

{ 
    "_id" : 'MyUniqueID_01' 
    "CreatedTime" : "2013-12-01T14:35:00Z", 
    "LastModifiedTime" : "2013-12-01T13:25:00Z" 
} 

는 지금은 데이터의 위에서 언급 한 종류의 문서의 큰 숫자에있는 MongoDB의 데이터베이스를 조회 할. 그리고 내 쿼리 $gt, $gte를 사용하여 즉, 날짜 범위를 기반으로 $lt & $lte

그래서 내 쿼리는 같은 수 있습니다 : 예상 된 결과는 위의 예를 고려

db.MyCollection.find({ 'CreatedTime': {$gt: '2013-05-25T09:29:40.572Z'}}) 

는, 쿼리가를 얻을 수있다 문서 ('CreatedTime'이후 : '2013-12-01T14 : 35 : 00Z'이 '2013-05-25T09 : 29 : 40.572Z'쿼리에서 전달 된 값보다 큽니다.); 반면에 문제는 필드 CreatedTime이 문자열 형식임을 나타냅니다.

질문 : 예상되는 결과를 문자열 필드 유형을 변경하지 않고 완벽하게 얻을 수있는 방법이 있습니까?

+1

ISO 8601 날짜/시간 문자열은 날짜 범위 쿼리에 적합해야합니다. 이것이 형식의 장점 중 하나입니다. 예제 쿼리는 예상대로 예제 문서를 반환합니다. – JohnnyHK

+0

@JohnnyHK : 고마워 ... 정확히 내 로컬 DB에서 작동하지만 동일한 쿼리가 라이브 서버에서 예상대로 작동하지 않습니다 .. 버전 종속성이 있습니까? –

+0

@AmolMKulkarni 호기심에서 서버에서 작동하지 않는 이유를 찾았습니까? 시간 범위를 쿼리하는 중 일하고 있는데 검색하는 동안이 문제가 발생했습니다. – Raghuveer

답변

9

위의 예에서와 똑같이 쿼리를 만들 수 있습니다.

문자열 순서는 일관되고 원하는 정확한 관계를 제공합니다.

+3

네,하지만 쿼리 문자열은 데이터 세트와 동일한 시간대 접미사를 사용해야한다고 추가했습니다. (또한 데이터 문자열을 저장하는 방법에 대한 또 다른 제약 조건을 추가합니다). 예를 들어, OP의 예는 ISO 8601 UTC 양식 ('Z'접미사 포함)이므로 쿼리 문자열 그 형식이어야합니다. –

관련 문제