MongoDB에서 날짜별로 컬렉션을 정렬하는 방법은 무엇입니까?


125

Node.JS와 함께 MongoDB를 사용하고 있습니다. 날짜와 다른 행을 포함하는 컬렉션이 있습니다. 날짜는 JavaScript Date객체입니다.

이 컬렉션을 날짜별로 정렬하려면 어떻게해야합니까?


1
단순, collection.find (). sort ({datefield : 1}, function (err, cursor) {...}); 또는 collection.find (). sort ({datefield : -1}, function (err, cursor) {...});
Atul Jain

참고 당신은 필요하지 않을 수도 date칼럼 : stackoverflow.com/questions/5125521/...
phil294

답변:


186

@JohnnyHK 답변에 대한 약간의 수정

collection.find().sort({datefield: -1}, function(err, cursor){...});

많은 사용 사례에서 우리는 최신 레코드를 반환하기를 원합니다 (예 : 최신 업데이트 / 삽입).


1
함수에 무엇을 넣을 계획입니까? Date2.6.3에서 함수없이 개체 를 정렬하려고하면 작동하지 않습니다.
Sam Brightman

@SamBrightman 그 함수는 단지 콜백입니다. 쿼리 결과로 무엇을하고 싶은지에 상관없이 해당 로직을 콜백 안에 넣습니다. 콜백이 무엇이며 이벤트 기반 프로그래밍을 배우기 위해 어떻게 작동하는지 자세히 읽을 수 있습니다.
Sushant Gupta 2015

물론입니다. 콜백이 무엇인지 압니다. 나는 질문에서 정렬 요구 사항 만 보았고 모든 답변은 콜백을 제공합니다. 동시에 정렬이 작동하지 않았기 때문에 기능에서 추가 작업을해야한다고 생각했습니다.
Sam Brightman

1
@SamBrightman 오 좋아. 편의를 위해 명시적이고 다음과 같이 연결할 수 있습니다.collection.find().sort(...).exec(function(err, cursor) {})
Sushant Gupta

5
그것은 일종의 말한다 ()는 1 개 인수한다
Jitendra Pancholi

39

날짜 별 정렬에는 특별한 것이 필요하지 않습니다. 컬렉션의 원하는 날짜 필드를 기준으로 정렬하면됩니다.

1.4.28 node.js 기본 드라이버 용으로 업데이트되었으며 datefield다음 방법 중 하나 를 사용하여 오름차순으로 정렬 할 수 있습니다 .

collection.find().sort({datefield: 1}).toArray(function(err, docs) {...});
collection.find().sort('datefield', 1).toArray(function(err, docs) {...});
collection.find().sort([['datefield', 1]]).toArray(function(err, docs) {...});
collection.find({}, {sort: {datefield: 1}}).toArray(function(err, docs) {...});
collection.find({}, {sort: [['datefield', 1]]}).toArray(function(err, docs) {...});

'asc''ascending'또한 대신 사용할 수 있습니다 1.

정렬 내림차순, 사용하려면 'desc', 'descending'또는 -1의 장소 1.


사용자 이름 필드에 위의 솔루션을 적용하고 있습니다. 잘 작동하지만 대소 문자를 구분합니다. 무시하는 방법은 무엇입니까?
Rahul Matte

다중 방식 (Y)와 정답
abdulbarik의

29
db.getCollection('').find({}).sort({_id:-1}) 

삽입 날짜를 기준으로 컬렉션이 내림차순으로 정렬됩니다.


16

Sushant Gupta의 답변은 약간 구식이며 더 이상 작동하지 않습니다.

다음 스 니펫은 이제 다음과 같아야합니다.

collection.find({}, {"sort" : ['datefield', 'asc']} ).toArray(function(err,docs) {});


트윗 담아 가기 정확한 시나리오는 기억 나지 않지만 지난 여름에 Sushant의 스 니펫으로 작업 할 수 있도록하려고했지만 제대로 작동하지 않았습니다. toArray부품 이 부족했기 때문일 수 있습니다.
krikara

이것은 실제로 잘못된 대답입니다. node.js에서 잘못된 결과를 제공합니다
David A

12

이것은 나를 위해 일했습니다.

collection.find({}, {"sort" : [['datefield', 'asc']]}, function (err, docs) { ... });

Node.js, Express.js 및 Monk 사용



5

몽구스를 사용하면 다음과 같이 간단합니다.

collection.find().sort('-date').exec(function(err, collectionItems) {
  // here's your code
})

4

정렬 매개 변수가 작동하려면 추가 정사각형 [] 대괄호가 필요합니다.

collection.find({}, {"sort" : [['datefield', 'asc']]} ).toArray(function(err,docs) {});

2

날짜 형식이 다음과 같으면 : 14/02/1989 ----> 몇 가지 문제가있을 수 있습니다.

다음과 같이 ISOdate를 사용해야합니다.

var start_date = new Date(2012, 07, x, x, x); 

-----> 결과 ------> ISODate ( "2012-07-14T08 : 14 : 00.201Z")

이제 다음과 같은 쿼리를 사용하십시오.

 collection.find( { query : query ,$orderby :{start_date : -1}} ,function (err, cursor) {...}

그게 다야 :)


2

몽구스를 사용하면 'toArray'를 사용할 수 없었고 오류가 발생했습니다. TypeError: Collection.find(...).sort(...).toArray is not a function. 네이티브 MongoDB NodeJS 드라이버의 Cursor 클래스에 toArray 함수가 있습니다 ( 참조 ).

또한 sort는 하나의 매개 변수 만 허용하므로 그 안에 함수를 전달할 수 없습니다.

이것은 나를 위해 일했습니다 ( Emil이 대답했습니다 ).

collection.find().sort('-date').exec(function(error, result) {
  // Your code
})
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.