MongoDB动态排名

hor*_*ace 5 performance ranking mongodb

我使用 MongoDB,拥有大约 100000 个条目的集合。

这些条目包含如下数据:

{"page": "page1", "user_count": 1400}
{"page": "page2", "user_count": 1100}
{"page": "page3", "user_count": 900}
...
Run Code Online (Sandbox Code Playgroud)

我想根据 user_count 输出条目的排名,例如:

#1 - page1
#2 - page2
#3 - page3
...
Run Code Online (Sandbox Code Playgroud)

...到目前为止,一切都很好。如果我只输出一个排序列表,我可以简单地使用循环计数器。

但我还必须支持各种搜索查询。例如,我得到 20 个结果,并想显示结果的排名。喜欢:

#432 - page1232
#32  - page223
#345 - page332
...
Run Code Online (Sandbox Code Playgroud)

最好的方法是什么?我真的不想将排名存储在集合中,因为集合不断变化。我尝试用我即时构建的查找字典来解决这个问题,但速度非常慢。MongoDB 是否有针对此类情况的特殊功能可以提供帮助?

小智 2

没有一个命令可以用来执行此操作,但可以使用 count 来执行此操作:

var doc = db.pages.findOne(); // Or however you get your document
var n = db.pages.find({user_count : {$gt : doc.user_count}}).count(); // This is the number of documents with a higher user_count
var ranking = n+1; // Your doc is next in a ranking
Run Code Online (Sandbox Code Playgroud)

另一个问题是您是否应该这样做。考虑以下:

  • 您需要 user_count 的索引。你可能已经有了这个。
  • 您需要对显示的每条记录执行计数查询。没有办法将这些进行批量处理。

鉴于此,与根据应用程序的 CRUD 配置文件将排名存储在集合中相比,您可能会对性能产生更大的影响 - 由您决定什么是最佳选项。