用户排名来自couchDB

时间:2014-08-07 16:31:00

标签: views couchdb

我试图从couchDB数据库中获取用户排名。我遇到的问题是我有多个用户和多个游戏。我希望能够传递2个键

  1. 应用ID
  2. 用户得分
  3. 我想知道有多少记录具有相同的应用ID,并且与我通过的记录相比得分更低。这将返回用户当前排名。这就是我的文档结构

    {
       "_id": "c68d16e1d8ba65accf97230dfbf7c2cb",
       "_rev": "114-2aea3eef75c73e1079ed9c8d945723e1",
       "credits": 2125,
       "appName": "someApp"
    }
    

    我尝试过设置视图但是多个键让我很困惑。这是我尝试过的但是没有用的

    查看

    "getrank": {
       "map": "function(doc) { emit([doc.appName, doc.credits],{credits:doc.credits}) }"
    }
    

    网址C&C已经尝试

    /players/_design/views/_view/getrank?key=["someApp","2000"]&startkey=["credits",2000]
    
    /players/_design/views/_view/getrank?key=someApp"&startkey=["credits",2000]
    

1 个答案:

答案 0 :(得分:2)

  

我想知道有多少记录具有相同的应用ID,并且与我通过的记录相比得分更低。

如果我理解你的问题你的观点看起来不错。也许不是发出一个对象,你可以doc.credits或者只是使用&include_docs来查询它。

您需要做的任何事情都是查询范围。 startkeyendkey应该有效。

_view/getrank?startkey=["someApp",minima]&endkey=["someapp",maxima]

此查询的作用是为最小和最大值之间的某个应用程序提供记录。现在我们需要以此为基础。

  

然后我通过的那个低分。

首先我们需要以降序方式查询它。这里唯一有趣的事情是键的顺序会反转: -

_view/getrank?startkey=["someApp",maxima]&endkey=["someapp",minima]&descending=true

现在假设您希望所有内容都低于9000.这是最终的查询,它将完成这一操作

_view/getrank?startkey=["someApp",9000]&endkey=["someapp",{}]

这为您提供了一些小于9000的应用程序的所有分数。

我实际上并没有运行这些查询,但这应该可以为您提供一些帮助。

如果您需要范围内的所有记录,则需要范围查询。

范围查询使用startkey和endkey完成。

当降序=真时,它们会反转。

希望这有帮助。