2

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.",
    }
}

前もって感謝します。

4

1 に答える 1