[MONGODB] 주변의 플레이어와 몽고의 순위 리더
MONGODB주변의 플레이어와 몽고의 순위 리더
어떻게 현재 플레이어의 계급과 주변의 플레이어 순위를 모두 얻을 수있는 쿼리를 만들 것입니다. 예를 들어, 나는 이름과 포인트 리더 수집을했다
{name: 'John', pts: 123}
요한은 23 위치에, 내가 22 일과 24 곳에서 사용자의 이름을 표시뿐만 아니라 할 것입니다.
나는 요한의 순위를 얻을 수 (123)보다 큰 점과 함께 리더 보드 항목의 수를 조회 할 수 있지만 내가 어떻게 효율적으로 단지 현재 플레이어 위와 아래 위를 기록하고 하나의 플레이어를받을 수 있나요? 혼자 인덱스 위치를 기반으로 항목을받을 수 있습니까?
나는 내가 먼저 수를 사용자의 순위 위치, 다음 스킵 제한 쿼리를 얻기 위해,이 쿼리를 만들 수 있다고 생각하지만 비효율적 인 것 같습니다 인덱스의 효율적인 사용을하지 않는 것
db.leaderboards.find({pts:{$gt:123}}).count();
-> 23
db.leaderboards.find().skip(21).limit(3)
마지막 쿼리는 내가 합리적 범위 쿼리 또는보다 효율적으로 뭔가 함께 할 수있는 방법이의 인덱스를 사용하여 24 개 기록을 통해 스캔 할 것 같다? 나는 사용자가 매우 낮은 000 번째 장소처럼, 위 경우이 문제가되고 볼 수 있습니다.
해결법
-
==============================
1.세 가지 쿼리를 수행해야합니다 :
세 가지 쿼리를 수행해야합니다 :
var john = db.players.findOne({name: 'John'}) var next_player = db.players.find( {_id: {$ne: john._id}, pts: {$gte: john.pts}}).sort({pts:1,name:1}).limit(-1)[0] var previous_player = db.players.find( {_id: {$ne: john._id}, pts: {$lte: john.pts}}).sort({pts:-1,name:-1}).limit(-1)[0]
이름과 점에 인덱스를 만듭니다.
from https://stackoverflow.com/questions/9992750/rank-leaderboard-in-mongo-with-surrounding-players by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] 어떻게 Node.js를에서 MongoDB를 지수 자바 스크립트 객체에 속성의 순서를 지정할 수 있습니다? (0) | 2019.12.25 |
---|---|
[MONGODB] 루프의 모든 몽고의 컬렉션을 통해 쿼리 실행 (0) | 2019.12.25 |
[MONGODB] 기존 컬렉션에 새 검사기를 추가 (0) | 2019.12.25 |
[MONGODB] MongoDB의에서 저장된 함수를 호출 (0) | 2019.12.25 |
[MONGODB] 어떻게 맵리 듀스로 MongoDB를 중복 레코드를 제거하려면? (0) | 2019.12.25 |