MongoDB复杂的查找

时间:2013-07-27 13:35:12

标签: ruby performance mongodb

我需要为8个用户中的每个用户获取前3个结果。目前,我正在为每个用户循环并进行8次调用db。有没有办法构建查询以在单个数据库拉动中拉出相同的8X3数据集?

selected_users =  users.sample(8)
cur = 0
while cur <= selected_users .count-1
  cursor = status_store.find({'user' => selected_users[cur]},{:fields =>params}).sort('score', -1).limit(3)
  *do something*
  cur+=1
end

我从中拉出的系列如下所示。每个用户都可以拥有未绑定数量的推文,因此我没有在用户文档中嵌入它们。

{
    "_id" : ObjectId("51e92cc8e1ce7219e40003eb"),
    "id_str" : "57915476419948544",
    "score" : 904,
    "text" : "Yesterday we had a bald eagle on the show. Oddly enough, he was in the country illegally.",
    "timestamp" : "19/07/2013 08:10",
    "user" : {
            "id_str" : "115485051",
            "name" : "Conan O'Brien",
            "screen_name" : "ConanOBrien",
            "description" : "The voice of the people. Sorry, people.",
    }
}

提前致谢。

1 个答案:

答案 0 :(得分:0)

是的,您可以使用aggregation framework

执行此操作

另一种方法是跟踪用户文档中的前3个分数。如果这个更快或更快取决于您写入分数的频率与用户读取到最高分数的比率。