我试图从couchDB数据库中获取用户排名。我遇到的问题是我有多个用户和多个游戏。我希望能够传递2个键
我想知道有多少记录具有相同的应用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]
答案 0 :(得分:2)
我想知道有多少记录具有相同的应用ID,并且与我通过的记录相比得分更低。
如果我理解你的问题你的观点看起来不错。也许不是发出一个对象,你可以doc.credits
或者只是使用&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完成。
当降序=真时,它们会反转。
希望这有帮助。