MongoDB + Ruby: обновление записей в итерации - PullRequest
2 голосов
/ 02 февраля 2012

Используя 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

Этот подход работает, но разве это лучший способ перебирать объекты и обновлять каждый?Есть ли лучший способ рассчитать рейтинг игрока?

1 Ответ

3 голосов
/ 03 февраля 2012

Другой подход заключается в том, чтобы выполнить полное обновление на сервере, выполнив функцию javascript:

update_rank = "function(){
 var rank=0;
 db.players.find().sort({pushups:-1}).forEach(function(p){
   rank +=1;
   p.rank = rank;
   db.players.save(p);
 });
}"
cn.eval( update_rank )

(Код предполагает, что у вас есть коллекция «Players» в Монго и переменная ruby ​​cnкоторый содержит соединение с вашей базой данных)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...