我遇到了一些特殊目的的集合操作实现,但一般情况下没有。执行集合操作的一般情况是什么(特别是交集、联合、对称差)。在 $where 或 map reduce 中使用 javascript 更容易弄清楚,但我想知道如何在聚合中执行此操作以获得 native 性能。
用一个例子来说明这个问题的更好方法。假设我有 2 个数组/集的记录:
db.colors.insert({
_id: 1,
left : ['red', 'green'],
right : ['green', 'blue']
});
我想找到'left'和'right'数组的并集、交集和差异。更好的是,我想找到图片:
联合 --> ['red', 'green', 'blue']
交叉口 --> ['green']
对称差分 --> ['red', 'blue']
最佳答案
仅限 2.6+ 版:
从 MongoDB 2.6 版开始,这变得容易得多。您现在可以执行以下操作来解决此问题:
联合
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要求将对称差异添加为核心功能,而不必合并两组差异。
https://stackoverflow.com/questions/17268770/
相关文章:
mongodb - 为什么 MongoDB 可以创建唯一索引而 Mongoid 不能?
java - Spring数据mongodb审计不起作用..(Java配置)
ruby-on-rails - 通过 AWS opsworks 设置 mongodb
python - Pymongo 或 Mongodb 将两个相等的 python 字典视为不同的对象
mongodb - 为什么 Spring Data MongoDB 无法实例化这种嵌套类型结构?
php - 如何在 Waterline 或 MongoDB 中选择、分组和加入