2016-07-22 3 views
0

사용자의 선택 (이름, 클라이언트, 날짜 등)에 따라 MongoDB 컬렉션을 정렬하려고합니다. 이름 및 클라이언트의 경우 정렬은 문자열별로 정렬되기 때문에 제대로 작동하지만 날짜 필드별로 정렬 할 때 결과가 정확하지 않습니다 (오름차순 또는 내림차순으로 변경하면 결과가 실제로 변경되므로 이상합니다). 올바른 순서로 반환되는 다음 Meteor/MongoDB : 날짜별로 컬렉션을 정렬하면 잘못된 결과가 반환됩니다.

는 분류 코드입니다.. 여기

let sort_order = {}; 
//columnSortType is date field and columnSortDirection is either 1 or -1 
sort_order[instance.state.get("columnSortType")] = instance.state.get("columnSortDirection"); 
if (instance.state.get("showAllServers")) { 
    return Servers.find({}, {sort: sort_order}); 
} 

당신에게 (단지 날짜 필드를 반환)을 엉망 순서의 더 나은 아이디어를 제공하는 샘플 결과가이 정렬입니다 내림차순으로 정렬하면 아래 목록이 뒤집 힙니다.

2016-05-25,453,210 2016년 5월 25일
2016년 5월 25일
2016년 4월 23일
2016년 4월 23일
2016년 4월 23일
2016년 3월 23일
2016년 3월 23일
2016년 7월 21일
2016년 7월 21일

2016년 3월 23일
2016년 7월 21일
나는, 그러나 나에게 유사한 문제가 될 듯 this posting 건너 온 내 날짜 필드는 데이터베이스에 저장 될 때 ISODate 형식입니다. 예를 들어 2016-04-23은 ISODate ("2016-04-23T04 : 00 : 00Z")와 같습니다. 이것은 내가 시간대 문제 또는 내부 클럭 문제 일 수 있다고 생각하게 만듭니다.하지만 두 대의 컴퓨터에서 로컬로 실행해도 동일한 결과가 반환됩니다.

UPDATE- 해결 : 나는 정렬이 잘못된 순서로 보이는 이유 알아 낸

(실제로 제대로 반환되었다, 단지 시각적으로 그 방법이 될하지 않은 것으로 보입니다). 나는 moment.js를 사용하여 클라이언트 측에서 날짜 형식을 지정했습니다. 즉, 객체에 이전에 빈 날짜가 있으면 moment.js가 현재 날짜로 해당 날짜를 채 웁니다. 이 때문에 날짜 중 일부는 데이터베이스에 저장되지 않은 새로 추가 된 날짜를 고려하지 않았기 때문에 잘못된 순서로 보였습니다.

+0

재생산하는 간단한 테스트 케이스를 만들 수 있습니까? – MasterAM

+0

여러 열로 정렬 하시겠습니까? 어쩌면 날짜보다 우선 순위가 높은 다른 열이있을 수 있습니다. – vijayst

+0

@ MasterAM 예, 새로운 날짜 값으로 시도했지만 여전히 동일한 결과를 얻습니다. –

답변

0

나는 정렬이 잘못된 순서로 나타나는 이유를 알아 냈습니다. 실제로는 올바르게 리턴되었지만 시각적으로는 그렇게 보이지 않았습니다. 나는 moment.js를 사용하여 클라이언트 측에서 날짜 형식을 지정했습니다. 즉, 객체에 이전에 빈 날짜가 있으면 moment.js가 현재 날짜로 해당 날짜를 채 웁니다. 이 때문에 날짜 중 일부는 데이터베이스에 저장되지 않은 새로 추가 된 날짜를 고려하지 않았기 때문에 잘못된 순서로 보였습니다.

관련 문제