首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mongodb多维数据聚合/重复数据删除

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

Stack Overflow用户
提问于 2012-02-20 20:21:46
回答 1查看 770关注 0票数 0

我有一个包含类似以下内容的数据的集合:

代码语言:javascript
复制
{
dimension1:a,
dimension2:b,
dimension3:c,
dimension4:d,
dimension5:e,
value: x
}

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

代码语言:javascript
复制
{ 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()似乎被设计用来做这样的事情,但是它不能处理我的数据大小

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-20 20:29:08

我想你想要一个Upsert With Modifier。这将满足您的第二种方法,即如果不存在匹配行,则插入一行,或者如果存在匹配行,则仅添加值。

所以你的例子应该是这样的:

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9361018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档