Cómo usar la agregación de MongoDB para operaciones de conjuntos de propósito general (unión, intersección, diferencia)

Me he encontrado con una implementación de propósito especial de operaciones de conjunto, pero nada para el caso general. ¿Cuál es el caso general para realizar operaciones de conjuntos (específicamente intersección, unión, diferencia simétrica)? Esto es más fácil de descifrar usando javascript en $ where o map map reduce, pero quiero saber cómo hacer esto en conjunto para obtener un rendimiento nativo.

La mejor manera de ilustrar esta pregunta es con un ejemplo. Digamos que tengo un registro con 2 arrays / sets:

db.colors.insert({
    _id: 1,
    left : ['red', 'green'],
    right : ['green', 'blue']
});

Quiero encontrar la unión, intersección y diferencia de las matrices 'izquierda' y 'derecha'. Aún mejor, pictóricamente quiero encontrar:

Unión -> ['rojo', 'verde', 'azul']

Intersección -> ['verde']

Diferencia simétrica -> ['rojo', 'azul']

Respuestas a la pregunta(2)

Su respuesta a la pregunta