[MONGODB] 몽고는 : 어떻게 외부 중량 정렬하려면
MONGODB몽고는 : 어떻게 외부 중량 정렬하려면
@NeilLunn 정상적으로 응답 한이 질문에 따라, 여기에 더 자세히 내 문제입니다.
이것은 일부는 일부는하지 않습니다 USER_ID 한 문서의 집합입니다. 문서를 생성 한 사용자를 나타냅니다 USER_ID :
{ "user_id" : 11, "content" : "black", "date": somedate }
{ "user_id" : 6, "content" : "blue", "date": somedate }
{ "user_id" : 3, "content" : "red", "date": somedate }
{ "user_id" : 4, "content" : "black", "date": somedate }
{ "user_id" : 4, "content" : "blue", "date": somedate }
{ "user_id" : 90, "content" : "red", "date": somedate }
{ "user_id" : 7, "content" : "orange", "date": somedate }
{ "content" : "orange", "date": somedate }
{ "content" : "red", "date": somedate }
...
{ "user_id" : 4, "content" : "orange", "date": somedate }
{ "user_id" : 1, "content" : "orange", "date": somedate }
{ "content" : "red", "date": somedate }
{ "user_id" : 90, "content" : "purple", "date": somedate }
각 페이지에 10 개해야합니다 내가 한도 그렇게하고 건너 뛸 수 있도록 프런트 엔드, 페이지를 당겨 그리고 그것은 매우 잘 작동한다.
경우에 우리는 사용자가 로그인 한, 나는 현재 그가 상호 작용 사용자를 기반으로, 그가 처음 더 흥미 찾을 수 있습니다 사용자 문서에 기록에 표시하고 싶습니다.
현재 사용자가 흥미 찾을 수 있습니다 사용자의 목록은 별 정렬되고, 몽고의 외부에 위치하고 있습니다. 첫 번째 요소는 내가 먼저 그의 서류를 제시하고자하는 가장 중요한 사용자이며, 목록의 마지막 사용자는 중요한 이상입니다 그래서.
목록은 다음과 같습니다 간단한 배열입니다 : [4,7,90,1].
이 사용자의 점수를 생성 시스템은 몽고에 위치하지 않은,하지만 난 그 의지 도움말 경우 데이터를 복사 할 수 있습니다. 또한 점수 번호를 포함하는 배열을 변경할 수 있습니다.
내가 달성하고자하는 것은 다음과 같다 :
, USER_ID 4에서 문서를 표시하는 첫번째 것 그래서, 문서가 목록에서 USER_ID의 중요성으로 분류 받기 USER_ID 칠초에서 문서 등등. 목록에 남아있는 사용자가없는 경우 언제 문서의 나머지 부분을 보여 드리고자합니다. 이 같이 :
이걸 어떻게 수행해야합니까? 나는 너무 많은 몽고에서 요구하는 건가요?
해결법
-
==============================
1.배열을 감안할 [4,7,90,1]는 당신이 당신의 쿼리에서 원하는 것은 이것이다 :
배열을 감안할 [4,7,90,1]는 당신이 당신의 쿼리에서 원하는 것은 이것이다 :
db.collection.aggregate([ { "$project": { "user_id": 1, "content": 1, "date": 1, "weight": { "$or": [ { "$eq": ["$user_id": 4] }, { "$eq": ["$user_id": 7] }, { "$eq": ["$user_id": 90] }, { "$eq": ["$user_id": 1] }, ]} }}, { "$sort": { "weight": -1, "date": -1 } } ])
모든 항목이 $ 또는 조건에 포함을 위해 그렇게 그 무엇,의 USER_ID 필드는 참 또는 거짓을 위해 1 또는 0을 제공된 값에 대해 테스트, 및 $ EQ 반환됩니다.
당신이 코드에서 어떻게하면 $의 배열 상태를 구축 배열에 당신이 각 항목입니다. 각 조건에 해당 것이 그냥 배열에 전달 및 연결, 해시 구조를 만드는, 그래서에서 $ 또는 조건의 배열 값으로.
이 부분이 명확했을 것이다, 그래서 아마 이전 코드 밖으로 $ 콘드 연산자를 떠난한다.
여기에 루비 뇌에 대한 몇 가지 코드는 :
userList = [4, 7, 90, 1]; orCond = []; userList.each do |userId| orCond.push({ '$eq' => [ 'user_id', userId ] }) end pipeline = [ { '$project' => { 'user_id' => 1, 'content' => 1, 'date' => 1, 'weight' => { '$or' => orCond } }}, { '$sort' => { 'weight' => -1, 'date' => -1 } } ]
개별 가중치를 갖고 싶어 우리는 키 값 쌍을 가정합니다 경우에, 당신은 $ 콘드 둥지에 필요
db.collection.aggregate([ { "$project": { "user_id": 1, "content": 1, "date": 1, "weight": { "$cond": [ { "$eq": ["$user_id": 4] }, 10, { "$cond": [ { "$eq": ["$user_id": 7] }, 9, { "$cond": [ { "$eq": ["$user_id": 90] }, 7, { "$cond": [ { "$eq": ["$user_id": 1] }, 8, 0 ]} ]} ]} ]} }}, { "$sort": { "weight": -1, "date": -1 } } ])
그냥 반환 값의 것을 참고,이 순서에있을 필요는 없습니다. 그리고 당신은 그것의 생성에 대해 생각할 수 있습니다.
이 구조를 생성하기 위해 여기에 참조 :
https://stackoverflow.com/a/22213246/2313887
from https://stackoverflow.com/questions/22192098/mongo-how-to-sort-by-external-weight by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] MongoDB를 업데이트 깊은 배열 (0) | 2019.12.15 |
---|---|
[MONGODB] 어떻게 몽고 날짜와 문서를 삽입? (0) | 2019.12.15 |
[MONGODB] 기준에 일치하는 모든 객체의 모든 배열 요소 수를 계산하여 MongoDB (0) | 2019.12.15 |
[MONGODB] 어떻게 그 널 (null)은 지난 MongoDB를에 정렬 정렬 할 수 있습니다로? (0) | 2019.12.15 |
[MONGODB] MongoDB를 지원 소수점 형식을 떠 있습니까? (0) | 2019.12.15 |