Mongodb多维数据聚合/重复数据删除

时间:2012-02-20 12:21:46

标签: mongodb multidimensional-array

我有一个包含类似数据的集合:

{
dimension1:a,
dimension2:b,
dimension3:c,
dimension4:d,
dimension5:e,
value: x
}

a,b,c,d,e可以有一定数量的值。因此,可以看到两行具有相同的尺寸和不同的存储值,如下所示:

{ dimension1:1, dimension2:1, dimension3:1, dimension4:1, dimension5:1, value: 12 }
{ dimension1:1, dimension2:1, dimension3:1, dimension4:1, dimension5:1, value: 34 }

我想聚合具有匹配尺寸的对象,并将它们替换为一个具有值总和的对象。

我知道我可以使用mapReduce来实现它,但是有没有办法更简单/更快地执行它,或者甚至确保我的insert语句会添加到现有值(如果有的话)?

[编辑]

我也看到db.collection.group()似乎是为了做这样的事情,但它无法处理我的数据大小

1 个答案:

答案 0 :(得分:2)

我想你想要Upsert With Modifier。这将满足您的第二种方法,以便在没有匹配的行存在时插入行,或者只在匹配的行存在时添加值。

所以你的例子就像:

db.mycollection.update( { dimension1: a, ... dimension5: e }, { $inc: { value: x } }, true); //the 'true' is the param that makes this update an upsert

如果要插入所有单个值,然后稍后聚合它们,我建议您将它们聚合到一个单独的集合中(以避免混淆)。可能最简单的方法是使用map / reduce而不是group,因为您可以简单地设置map / reduce的输出选项,以使用以下选项将其输出合并到聚合集合中:out : {reduce: "aggregatedcollection"}