我该如何在Mongo查询/集合中获取记录的位置?

3
例如,假设我在MongoDB中有一个排行榜。以下查询将获取排行榜的一部分:
db.leaderboard.find().sort({ score: -1 }).limit(30)

如果我有一个排行榜条目,它具有一个名为a_id,那会怎么样?
db.leaderboard.find({ _id: 'a' })

我该如何找到排行榜上那条记录的位置?
1个回答

4

很简单。首先,找到目标记录的分数:

db.leaderboard.find({ _id: 'a' }, {score : 1, _id : 0});

然后统计所有得分大于目标得分的文档数量:

db.leaderboard.find({ score : { $gt : 100 /* targetScore */ } }).count();  

您的位置将是计数器的+1。 有一个警告:如果有多个文档与目标分数相同,则您的位置可能会“错误”。 例如:当您使用sort对文档进行排序时,且您有3个文档。假设它们在7、8和9个“位置”,则带有id为'a'的文档可以在这些“位置”中的任何一个上。

谢谢!我认为这样就可以了。在这种情况下,分数相等的可能性非常小。 - stef
1
事实上,我认为相同分数的情况只需要增加一个查询即可解决 - 获取所有具有相同分数的条目,并按照特定的某个属性排序(创建日期、用户名、电子邮件地址等),然后确保实际排行榜也按照同样的属性排序。 - stef
有没有办法解决分数相同的文档? - hamidfzm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接