Somente versão 2.6+:
A partir da versão 2.6 do MongoDB, isso ficou muito mais fácil. Agora você pode fazer o seguinte para resolver esse problema:
União
db.colors.aggregate([
{'$project': {
union:{$setUnion:["$left","$right"]}
}
}
]);
Intersecção
db.colors.aggregate([
{'$project': {
int:{$setIntersection:["$left","$right"]}
}
}
]);
Complemento Relativo
db.colors.aggregate([
{'$project': {
diff:{$setDifference:["$left","$right"]}
}
}
]);
Diferença simétrica
db.colors.aggregate([
{'$project': {
diff:{$setUnion:[{$setDifference:["$left","$right"]}, {$setDifference:["$right","$left"]}]}
}
}
]);
Observação:há um bilhete solicitar que a diferença simétrica seja adicionada como um recurso principal, em vez de ter que fazer a união de duas diferenças de conjunto.