Изучаем RoR и Mongo, почему бы не подсчитать массив для голосов - PullRequest
4 голосов
/ 01 июля 2010

Я совершенно новичок в Mongo и RoR, пришёл из PHP-фона.

Я только что изучал этот урок о моделировании данных http://www.mongodb.org/display/DOCS/MongoDB+Data+Modeling+and+Rails

и был поражен вопросомпочему в руководстве рекомендуется хранить голоса в поле и обновлять это поле как

db.stories.update({_id: story_id, voters: {'$ne': user_id}}, 
  {'$inc': {votes: 1}, '$push': {voters: user_id}});
вместо
db.stories.update({_id: story_id, voters: {'$ne': user_id}}, 
  {'$push': {voters: user_id}});

, а затем подсчитывать

Story.voters.count
, чтобы получить количество пользователей, у которых естьПроголосовал?

Я знаю, что это учебное пособие, но это не самый эффективный способ управления данными.

1 Ответ

1 голос
/ 15 июля 2010

Учебное пособие может помочь лучше, объяснив цель сохранения поля кэша счетчика (голосов), поскольку оно необходимо только в том случае, если вы собираетесь выполнять запросы диапазона для размера массива.

С Документы :

Вы не можете использовать $ size, чтобы найти диапазон размеров (например: массивы с более 1 элемента). Если вам нужно запросить диапазон, создать дополнительный поле размера, которое вы увеличиваете, когда вы добавить элементы.

В будущем нам, вероятно, не придется этого делать, поскольку возможности запросов продолжают расти. Смотри билет JIRA SERVER-478 .

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