몽구스에서 날짜별로 어떻게 정렬합니까? (node.js)


161

몽구스 에서이 쿼리를 실행한다고 가정 해 봅시다.

Room.find({}, function(err,docs){

}).sort({date:-1}); 

작동하지 않습니다!

답변:


429

몽구스에서 정렬 은 릴리스에 따라 진화하여 이러한 답변 중 일부가 더 이상 유효하지 않습니다. 의로서 전 4.1.x의 몽구스의 출시,상의 종류 내림차순 date필드는 다음과 같은 방법으로 수행 할 수 있습니다 :

Room.find({}).sort('-date').exec(function(err, docs) { ... });
Room.find({}).sort({date: -1}).exec(function(err, docs) { ... });
Room.find({}).sort({date: 'desc'}).exec(function(err, docs) { ... });
Room.find({}).sort({date: 'descending'}).exec(function(err, docs) { ... });
Room.find({}).sort([['date', -1]]).exec(function(err, docs) { ... });
Room.find({}, null, {sort: '-date'}, function(err, docs) { ... });
Room.find({}, null, {sort: {date: -1}}, function(err, docs) { ... });

오름차순 정렬의 경우, 생략 -의 문자열 버전 또는 사용 값에 접두사 1, asc또는를 ascending.


1
수행 할 수있는 다양한 방법을 보여주는 +1 그러나 문서에서 Query # find 가 많은 인수를 취할 것임을 찾을 수 없습니다 . 서명은입니다 Query#find([criteria], [callback]). "기준"은 최대 3 개의 인수가 될 수있는 비밀 핸드 셰이크가 있다고 생각했지만 유형을 "Object"로 나열합니다.
Nateowami

@Nateowami 당신은 find문서에서 잘못된 방법을 보고 있습니다. 참조하십시오 Model.find.
JohnnyHK

1
네가 옳아. 나는 그들이 Module#property표기법 을 사용하고있는 것을보고 검색했습니다 #find. 문서를 탐색하거나 검색하는 쉬운 방법이없는 것 같습니다. 찾기를 검색하면 187 개의 결과가 생성됩니다.
Nateowami 2012

2
_id필드 별로 정렬 할 수도 있습니다 . 예를 들어, 가장 최근의 기록을 얻으려면 다음을 수행하십시오.await db.collection.findOne().sort({ _id: -1 });
Mike K

53

정답은 다음과 같습니다.

Blah.find({}).sort({date: -1}).execFind(function(err,docs){

});

13
위의 예에서 업데이트 된 정렬 구문은 다음과 같습니다. sort ( '
-date

3
이것은 나를 위해 작동하지 않았습니다. "User.find (...). sort (...). execFind는 함수가 아닙니다"라는 오류가 발생합니다
Sandip Subedi

12

Mongoose 3.5 (.2)를 사용하여 오늘이 문제를 해결했지만이 문제를 해결하는 데 도움이되는 답변은 없습니다. 다음 코드는 트릭을 수행합니다.

Post.find().sort('-posted').find(function (err, posts) {
    // user posts array
});

필요한 표준 매개 변수 find()(예 : where 절 및 반환 필드)를 보낼 수 있지만 콜백은 할 수 없습니다 . 콜백이 없으면 연결 한 Query 객체를 반환합니다 sort(). find()더 많은 매개 변수를 사용하거나 사용하지 않고 다시 호출해야 합니다 (효율적인 이유로 필요하지 않음). 콜백에서 결과 집합을 가져올 수 있습니다.


4

나는 이것을한다:

Data.find( { $query: { user: req.user }, $orderby: { dateAdded: -1 } } function ( results ) {
    ...
})

가장 최근의 것들이 먼저 표시됩니다.


1
$orderbyMongoDB 3.2에서는 더 이상 사용되지 않으므로 더 이상 사용해서는 안됩니다.
JohnnyHK

4
Post.find().sort({date:-1}, function(err, posts){
});

잘 작동해야합니다

편집하다:

오류가 발생하면 이것을 사용해보십시오 sort() only takes 1 Argument.

Post.find({}, {
    '_id': 0,    // select keys to return here
}, {sort: '-date'}, function(err, posts) {
    // use it here
});

1
이것은 나에게 오류를 준다 :Error: sort() only takes 1 Argument
mrid

@LukeXF 업데이트 된 답변을 참조하십시오. 나는 그것이 당신을 도울 수 있기를 바랍니다 :)
mrid

@mrid이 같아야합니다 Post.find({}, {'_id': 0}).sort("-date").function(err, posts){});
모스 타파 Ghadimi

2

짧은 해결책 :

const query = {}
const projection = {}
const options = { sort: { id: 1 }, limit: 2, skip: 10 }

Room.find(query, projection, options).exec(function(err, docs) { ... });

1

이것이 도움이되는지> 몽구스에서 정렬하는 방법을 참조하십시오 .

또한 이것을 읽으십시오> http://www.mongodb.org/display/DOCS/Sorting+and+Natural+Order


그 첫 번째 방법은 작동하지 않습니다. 그냥 중단됩니다 ... 몽구스의 업데이트 때문이라고 생각합니다 .... 그리고 두 번째 방법은 내가 아는 몽고 문서 일뿐입니다.
TIMEX

find () 함수는 Mongoose가 아닌 MongoDB의 함수입니다. 자세한 내용은 Mongoose API 페이지를 참조하십시오. Mongoose와 함께 MongoDB 문서에 정의 된 구문을 사용할 수 있습니다. 그렇기 때문에 몽구스에는 자체 정렬 또는 교차 쿼리가 없습니다.
neebz

0

_id필드 별로 정렬 할 수도 있습니다 . 예를 들어 가장 최근의 기록을 얻으려면

const mostRecentRecord = await db.collection.findOne().sort({ _id: -1 });

귀하의 date필드에 색인이 생성되지 않았다는 점을 기꺼이 생각하기 때문에 훨씬 빠릅니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.