[MONGODB] 계산 조건에 몽고 정렬
MONGODB계산 조건에 몽고 정렬
나는 모양이를 좋아하는 메시지 몽고의 컬렉션이 있습니다 :
{
'recipients': [],
'unRead': [],
'content': 'Text'
}
수신자는 사용자 ID의 배열이며, 읽지는 아직 메시지를 열지 않은 모든 사용자의 배열입니다. 즉 의도 한대로 일하고,하지만 난처럼, 처음으로 뭔가를 읽지 않은 사람을 우선 순위, 그래서 처음 20 개 결과를 반환하는 모든 메시지의 목록을 조회해야합니다
db.messages.find({recipients: {$elemMatch: userID} })
.sort({unRead: {$elemMatch: userID}})
.limit(20)
그러나 그것은 작동하지 않습니다. 그들은 특정 기준에 맞는 여부에 따라 결과의 우선 순위를하는 가장 좋은 방법은 무엇입니까?
해결법
-
==============================
1.특정 기준에 따라 "무게"결과를 원하는 또는 "종류"에서 "계산 된 값"어떤 종류가있는 경우에, 당신은 대신 .aggregate () 메소드가 필요합니다. 이것은 문서 만 존재하는 필드를 사용할 수있는, 값이 $의 정렬 작업에 사용되는 "예상"허용 :
특정 기준에 따라 "무게"결과를 원하는 또는 "종류"에서 "계산 된 값"어떤 종류가있는 경우에, 당신은 대신 .aggregate () 메소드가 필요합니다. 이것은 문서 만 존재하는 필드를 사용할 수있는, 값이 $의 정렬 작업에 사용되는 "예상"허용 :
db.messages.aggregate([ { "$match": { "messages": userId } }, { "$project": { "recipients": 1, "unread": 1, "content": 1, "readYet": { "$setIsSubset": [ [userId], "$unread" ] } } }}, { "$sort": { "readYet": -1 } }, { "$limit": 20 } ])
여기서 $ setIsSubset의 운영자는 일치가 있는지 [userId를]의 변환 배열은 "읽지 않음"배열의 비교를 허용한다. 그렇지 않은 경우 결과는 중 사용자 ID가 존재하는 참 또는 거짓 일 것이다.
이것은 다음 (일종의 분야별 것은 위에 사실이다)하는 주문 성냥에 우선으로 결과를 정렬 $에 전달 될, 그리고 마지막으로 $ 한계는 지정된 금액에 결과를 반환 할 수 있습니다.
이에 따라 정렬 할 수 있도록 그래서 "종류"에 대한 계산 된 용어를 사용하기 위해, 값 필요로 문서에 "전망". 집계 프레임 워크는이 작업을 수행하는 방법이다.
또한 $ elemMatch 그냥 배열 내에서 하나의 값과 일치하도록 필요하지 않습니다, 당신은 직접 값을 지정할 필요가있다. "여러"조건은 물론 여기에 적용되지 않는 하나의 배열 요소에 충족해야 곳의 목적이다.
from https://stackoverflow.com/questions/32958402/mongo-sort-on-a-calculated-condition by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] 집계에 대한 구조 생성 (0) | 2019.12.10 |
---|---|
[MONGODB] MongoDB를 집계 명령 / 파이프 라인에 행 번호의 어떤 종류를 추가 (0) | 2019.12.10 |
[MONGODB] MongoDB를 단일 쿼리로 여러 카운트 (0) | 2019.12.10 |
[MONGODB] 나는 MongoDB에 대한 쿼리에 정규식 변수를 사용하는 방법 (0) | 2019.12.10 |
[MONGODB] 두 점 사이의 MongoDB를 인쇄 거리 (0) | 2019.12.10 |