我遇到过一些特殊目的的集合运算实现,但没有遇到过一般情况。执行集合运算(特别是交集、并集、对称差)的一般情况是什么?在 $where 或 map reduce 中使用 javascript 更容易弄清楚这一点,但我想知道如何在聚合中执行此操作以获得本机性能。
说明这个问题的更好方法是用一个例子。假设我有一条包含 2 个数组/集的记录:
db.colors.insert({
_id: 1,
left : ['red', 'green'],
right : ['green', 'blue']
});
我想找到“左”和“右”数组的并集、交集和差值。更好的是,通过图示我想找到:
Union--> ['红色', '绿色', '蓝色']
路口--> ['绿色']
对称差--> ['红色', '蓝色']
仅限 2.6+ 版本:
从 MongoDB 2.6 版本开始,这变得更加容易。您现在可以执行以下操作来解决此问题:
Union
db.colors.aggregate([
{'$project': {
union:{$setUnion:["$left","$right"]}
}
}
]);
路口
db.colors.aggregate([
{'$project': {
int:{$setIntersection:["$left","$right"]}
}
}
]);
相对补语
db.colors.aggregate([
{'$project': {
diff:{$setDifference:["$left","$right"]}
}
}
]);
对称差
db.colors.aggregate([
{'$project': {
diff:{$setUnion:[{$setDifference:["$left","$right"]}, {$setDifference:["$right","$left"]}]}
}
}
]);
注意:有一个ticket请求将对称差异添加为核心特征,而不是必须对两个集合差异进行并集。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)