2
MongoDBとRubyドライバを使用して、私のアプリのプレイヤーのランキングを計算しようとしているので、(この場合は)プッシュアップでソートしてから、オブジェクトごとにフィールドと値をランク付けします。MongoDB + Ruby:繰り返しでレコードを更新する
pushups = coll.find.sort(["pushups", -1])
pushups.each_with_index do |r, idx|
r[:pushups_rank] = idx + 1
coll.update({:id => r }, r, :upsert => true)
coll.save(r)
end
このアプローチはうまくいきますが、これはオブジェクトを繰り返し処理してそれぞれを更新する最良の方法ですか?プレーヤーのランクを計算する良い方法はありますか?
私はそのアプローチが好きです! – yalestar
私はそれも正しいアプローチだと思います。 db.players.update({_ id:p._id}、{$ set:{rank:rank}})または何か –
また、evalロックデータベース全体。これは、多くの同時リクエストがある場合、および/またはプレイヤーが成長すると、規模が拡大しません。 FWIW、MongoDBでも順位を上げていましたが、その特定のロジックをRedisソートセットに切り替えました。私は私の肯定的な経験についてブログしました:http://openmymind.net/2011/5/8/Practical-NoSQL-Solving-a-Real-Problem-w-Mongo-Red/ –