CouchDB排名

时间:2014-07-06 18:37:00

标签: couchdb ranking nosql

我正在尝试使用沙发数据库找出按排名排序的最佳方法。我将文档设置在像这样的玩家数据库中:

{
   "_id": "user2",
   "_rev": "31-65e0e5bb1eba8d6a882aad29b63615a7",
   "username": "testName",
   "apps": {
       "app1": {
           "score": 1000
       },
       "app2": {
           "score": 1000
       },
       "app3": {
           "score": 1000
       }
   }
}

玩家可以拥有各种应用的多个分数。我正试图找出最好的方法来说出app1的前50名。

1 个答案:

答案 0 :(得分:2)

我认为一个想法可能是分别为每个应用程序存储每个用户的分数。像这样: -

{"app":"app1","user":"user_id","score":"9000"}

你可以写一个地图功能

emit([doc.app,doc.score],{_id:doc.user,score:doc.score})

并查询视图

/view_name?include_docs=true&startkey=["app1",{}]&endkey=["app1"]&descending=true

通过这种安排,您可以按应用的分数和名称排序视图。以下是您获得的结果。

{"total_rows":2,"offset":0,"rows":[

{"id":"61181c784df9e2db5cbb7837903b63f5","key":["app1",10000],"value":

{"_id":"5002539daa85a05d3fab16158a7861c1","score":10000},"doc":   {"_id":"5002539daa85a05d3fab16158a7861c1","_rev":"1-8441f2f5dbaaf22add8969cea5d83e1b","user":"jiwan"}}

{"id":"7f5d53b2da8ae3bea8e2b7ec74020526","key":["app1",9000],"value":

{"_id":"336c2619b052b04992947976095f56b0","score":9000},"doc":     {"_id":"336c2619b052b04992947976095f56b0","_rev":"3-3e4121c1831d7ecafc056e71a2502f3a","user":"akshat"}} ]}

你的价值得分。用户在doc。

修改

糟糕!我错误地输入了startkeyendkey :)。请注意,startKey不是startkey而是endkey相同。另请注意,由于降序为真,我们会反转键的顺序。它应该按预期工作。

如需更多帮助,请查看

  1. This answer
  2. This answer