我试图从couchDB数据库获得用户排名。我所面临的问题是我拥有多个用户和多个游戏。我希望能够传递两个键
- app id
- 用户评分
我想看看有多少记录具有相同的应用程序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
..
无论如何,你需要做的是在一个范围内查询。startkey
和endkey
可以工作。
_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时,它们是相反的。