2012-01-10 2 views
1

Я делаю игру. Часть игры состоит в том, чтобы собирать объекты. Вы получаете баллы за «разнообразие», поэтому каждый объект в категории имеет свойства. Если вы собрали объект с определенным свойством, множитель для этого свойства больше не применяется ни к одному из других объектов с этим свойством. Точки рассчитываются путем комбинирования всех значений unqiue для каждого собранного вами имущества, а затем умножения на коэффициент для этого свойства. Например:MongoDB Алгоритм для сбора информации об объекте

Points 
Category: Toys 
Base: 2 
Shape: 7 
Material: 10 
Color: 5 

Bouncy ball:    Snow Globe: 
category: sphere   category: sphere  
shape: round    shape: round 
material: rubber   material: glass 
color: swirls   color: clear 

Collected: 
bases = my_objects.length * base = 2 * 2 = 4 
shapes = array('round').length * 7 
materials = array('rubber', 'glass') * 10 
color = array('swirls', 'red') * 5 

score = bases + shapes + materials + color = 4 + 7 + 20 + 10 = 41 

Объекты хранятся в виде документов nosql (mongodb). Мой вопрос заключается в том, что лучший способ выбрать все остальные объекты из базы данных, в том порядке, в котором несохраненные объекты будут добавлять наибольшее количество баллов в счет пользователя.

ответ

0

При дальнейшем изучении проблемы, кажется, моя цель не имеет значения. Как только что-то будет собрано, весь порядок того, что объект дает наибольшее количество очков, резко изменится, поэтому вначале нет смысла заказывать.

0

магазин оценка Всего в документе, а затем вы можете отсортировать данные по этому убыванию (с использованием индекса при желании)

вы не можете «сортировать по а + Ь + с» в Монго еще, так что, скорее всего, best

+0

оценка каждого документа зависит от того, кто зарегистрировался и что они собрали ранее. Хранение этого документа потребует от меня пересчета баллов за миллионы объектов каждый раз, когда пользователь собирает новый объект – chris