从couchDB获取用户排名



我试图从couchDB数据库获得用户排名。我所面临的问题是我拥有多个用户和多个游戏。我希望能够传递两个键

  1. app id
  2. 用户评分

我想看看有多少记录具有相同的应用程序id和较低的分数,然后我通过了一个。这将返回用户的当前排名。这就是我的文档结构

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

我试过设置视图,但多个键真的让我困惑。这是我尝试过的,但没有工作

<<p> 视图/strong>
"getrank": {
   "map": "function(doc) { emit([doc.appName, doc.credits],{credits:doc.credits}) }"
}

URL CALLS I'VE trying

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

我想看看有多少记录具有相同的应用程序id和较低的分数,然后我通过了一个。

如果我正确理解你的问题,你的观点看起来很好。也许不是发出一个对象,你可以只做doc.credits或简单地null和查询&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完成。

当降序=true时,它们是相反的。

最新更新