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.",
}
}
前もって感謝します。