반응형
몽고 콤플렉스 정렬?
MongoDB에서 쿼리를 여러 필드별로 정렬하는 방법을 알고 있습니다. 예를 들어,db.coll.find().sort({a:1,b:-1})
.
사용자 정의 함수로 정렬할 수 있습니까? 예를 들어 a와 b가 정수라고 가정하면 a와 b의 차이로 정렬할 수 있습니다.(a-b)
?
감사합니다!
업데이트: 이 답변은 오래된 것 같습니다. 정렬하기 전에 입력 문서를 변환하기 위해 집계 파이프라인의 기능을 사용하여 사용자 지정 정렬을 수행할 수 있습니다.@Ari의 답변을 참조하십시오.
이것이 직접적으로 가능하다고는 생각하지 않습니다. 정렬 설명서에는 사용자 지정 비교 기능을 제공하는 방법이 명시되어 있지 않습니다.
클라이언트에서 정렬하는 것이 가장 좋지만, 서버에서 정렬하기로 결정한 경우 사용할 수 있습니다.db.eval()
클라이언트가 지원하는 경우 서버에서 정렬을 실행하도록 설정합니다.
서버 측 정렬:
db.eval(function() {
return db.scratch.find().toArray().sort(function(doc1, doc2) {
return doc1.a - doc2.a
})
});
동등한 클라이언트 측 정렬과 비교:
db.scratch.find().toArray().sort(function(doc1, doc2) {
return doc1.a - doc2.b
});
집계 파이프라인을 통해 그리고 운영자에 의해 정렬될 수도 있습니다(즉,.sort()
그러나 이 두 가지 방법 모두 사용자 정의 정렬 기능을 제공할 수 없습니다.
이런 상황에 부딪혔고 제가 생각해낸 것은 다음과 같습니다.
db.collection.aggregate([
{
$project: {
difference: { $subtract: ["$a", "$b"] }
// Add other keys in here as necessary
}
},
{
$sort: { difference: -1 }
}
])
이 작업으로 필드를 만들고 정렬하는 것이 어떻습니까?
언급URL : https://stackoverflow.com/questions/3212919/mongo-complex-sorting
반응형
'programing' 카테고리의 다른 글
Next App을 초기화하기 전에 창 너비를 가져오고 저장하는 방법은 무엇입니까? (0) | 2023.07.05 |
---|---|
mongoDB Java 드라이버 로깅을 비활성화하는 방법은 무엇입니까? (0) | 2023.06.30 |
Ionic 2 - 앱용 글로벌 NavBar (0) | 2023.06.30 |
Firebase용 클라우드 기능 - getaddrinfo ENOTFound (0) | 2023.06.30 |
오른쪽에서 줄을 잡다 (0) | 2023.06.30 |