一个对象收集博弈的MongoDB算法

一个对象收集博弈的MongoDB算法,mongodb,algorithm,sorting,nosql,Mongodb,Algorithm,Sorting,Nosql,我在做游戏。游戏的一部分是收集物品。您可以获得“多样性”点数,这样类别中的每个对象都有属性。如果已收集具有特定特性的对象,则该特性的乘数将不再应用于具有该特性的任何其他对象。通过组合已收集的每个特性的所有unqiue值,然后乘以该特性的系数来计算点。例如: Points Category: Toys Base: 2 Shape: 7 Material: 10 Color: 5 Bouncy ball: Snow Globe: category: sphere

我在做游戏。游戏的一部分是收集物品。您可以获得“多样性”点数,这样类别中的每个对象都有属性。如果已收集具有特定特性的对象,则该特性的乘数将不再应用于具有该特性的任何其他对象。通过组合已收集的每个特性的所有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)。我的问题是,从数据库中选择所有剩余对象的最佳方法是什么?未收集的对象将按向用户分数添加最多分数的顺序排列。

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


您还不能在mongo中“按a+b+c排序”,因此这可能是最好的

进一步探讨这个问题后,我的目标似乎无关紧要。一旦收集到其他内容,获得最多分数的对象的整个顺序将发生急剧变化,因此首先没有必要进行排序。

每个文档的分数取决于谁登录以及他们以前收集的内容。将其存储在文档中需要我在每次用户收集新对象时重新计算数百万个对象的分数