2015-09-21 118 views
1

我有用户的集合用户相对排行榜,每个用户都有一个点的属性(见下文模式)。查询与MongoDB的

我的最终目标是根据一个特定的用户位置返回有限文件的排序后的数组,或者换句话说,排行榜相对为特定用户位置的一小部分。

目前我查询和排序的所有用户,找到返回数组中我希望用户,并根据该切片阵列。我想知道是否有一个查询可以让我返回所有用户。

样品用户模式:

/* 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”(我的亲戚用户),在领先后,他的文档的文档(在上面的例子中“用户3”)和他之前1号文件(在上面的例子中“用户2”)

谢谢!

编辑:即时通讯使用猫鼬以及如果这简化了事情。

EDIT2:请看到预期的输出如下 -

/* 1 */ 
    { 
     "_id" : ObjectId("..."), 
     "points" : 3835, 
     "key" : "user2" 
    } 
/* 2 */ 
    { 
     "_id" : ObjectId("...."), 
     "points" : 2437, 
     "key" : "user4" 
    } 
/* 3 */ 
    { 
     "_id" : ObjectId("..."), 
     "points" : 1984, 
     "key" : "user3" 
    } 

注意,作为查询请求1个用户上面排和1个用户排在“USER4”“USER1”没有出现在输出

+0

'USER4,用户3,用户2'?这不是按“分”排序 – styvane

+0

它对您的预期输出很困惑。你能否添加有问题的预期输出? – Vishwas

+0

@Vishwas,感谢您的反馈。我已经添加了预期的输出。 –

回答

2

听起来你试图做到这一点:rank leaderboard in mongo with surrounding players

正如在回答这个问题,这样做是有三个查询的最简单的方式说。即使这增加了查询的数量,您传输的数据也会大大减少。

+0

感谢您的回答!由于链接的帖子是3岁,我认为它值得询问是否有更好的方法来做到这一点(一个查询将是最佳的)。另外,为什么上述解决方案比我的解决方案更好? (根据用户位置返回所有用户排序和切片)。 –

+0

通常,处理数据(即在服务器上)而不是全部传输到客户端并在那里处理数据会更好,因为它减少了需要传输的数据量。另外,服务器(在这种情况下,Mongo)可能已经过很多优化来处理数据并进行查询,所以使用它是有意义的! –