我有一组用户,每个用户都有一个点属性(参见下面的架构)。
我的最终目标是根据特定的用户位置返回有限文档的排序数组,换句话说,是针对特定用户位置的排行榜的一小部分。
目前,我查询并排序所有用户,在返回的数组中找到我想要的用户,并根据该数据切片。我想知道是否有一个查询可以让我回复所有用户。
示例用户架构:
/* 1 */
{
"_id" : ObjectId("..."),
"points" : 5852 ,
"key" : "user1"
}
/* 2 */
{
"_id" : ObjectId("..."),
"points" : 3835,
"key" : "user2"
}
/* 3 */
{
"_id" : ObjectId("..."),
"points" : 1984,
"key" : "user3"
}
/* 4 */
{
"_id" : ObjectId("...."),
"points" : 2437,
"key" : "user4"
}
让我们假设我希望查询返回按点排序的3个文档 - “user4”(我的相对用户)的文档,他在排行榜中的文档(上例中的“user3”)和他之前的1个文档(上例中的“user2”)
谢谢!
编辑:我也使用mongoose,如果这简化了事情。
编辑2:请参阅下面的预期输出 -
/* 1 */
{
"_id" : ObjectId("..."),
"points" : 3835,
"key" : "user2"
}
/* 2 */
{
"_id" : ObjectId("...."),
"points" : 2437,
"key" : "user4"
}
/* 3 */
{
"_id" : ObjectId("..."),
"points" : 1984,
"key" : "user3"
}
请注意,“user1”未出现在输出中,因为查询要求上面排名的1位用户和排名低于“user4”的1位用户
答案 0 :(得分:2)
听起来你正试图这样做:rank leaderboard in mongo with surrounding players
正如在该问题的答案中所述,最简单的方法是使用三个查询。即使这是查询数量的增加,您传输的数据也会大大减少。