用于对象收集游戏的MongoDB算法

时间:2012-01-10 14:53:00

标签: mongodb algorithm sorting nosql

我正在制作游戏。游戏的一部分是收集物品。您可以获得“多样性”的分数,因此类别中的每个对象都具有属性。如果已收集具有特定属性的对象,则该属性的乘数不再应用于具有该属性的任何其他对象。通过组合您收集的每个属性的所有unqiue值,然后乘以该属性的系数来计算这些点。例如:

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)。我的问题是,从数据库中选择所有剩余对象的最佳方法是,未收集的对象将为用户的分数添加最多的点。

2 个答案:

答案 0 :(得分:0)

将得分总计存储在文档中,然后您可以按降序排序(如果需要,使用索引)

你不能在mongo中“按+ b + c排序”,所以这可能是最好的

答案 1 :(得分:0)

在进一步探索问题后,我的目标似乎无关紧要。一旦收集了其他东西,哪个对象产生最多点的整个顺序将发生巨大变化,因此首先排序没有意义。