Solo versión 2.6+:
A partir de la versión 2.6 de MongoDB, esto se ha vuelto mucho más fácil. Ahora puede hacer lo siguiente para resolver este problema:
Unión
db.colors.aggregate([
{'$project': {
union:{$setUnion:["$left","$right"]}
}
}
]);
Intersección
db.colors.aggregate([
{'$project': {
int:{$setIntersection:["$left","$right"]}
}
}
]);
Complemento relativo
db.colors.aggregate([
{'$project': {
diff:{$setDifference:["$left","$right"]}
}
}
]);
Diferencia simétrica
db.colors.aggregate([
{'$project': {
diff:{$setUnion:[{$setDifference:["$left","$right"]}, {$setDifference:["$right","$left"]}]}
}
}
]);
Nota:hay un ticket solicitando que se agregue la diferencia simétrica como una característica central en lugar de tener que hacer la unión de dos diferencias de conjuntos.