Como usar a agregação do MongoDB para operações com conjuntos de propósito geral (união, interseção, diferença)

Eu me deparei com alguma implementação de propósito especial de operações de conjunto, mas nada para o caso geral. Qual é o caso geral para executar operações de conjunto (especificamente intersecção, união, diferença simétrica). Isso é mais fácil de descobrir usando javascript em um $ where ou map reduce, mas eu quero saber como fazer isso em agregação para obter desempenho nativo.

A melhor maneira de ilustrar essa questão é com um exemplo. Digamos que eu tenha um registro com 2 matrizes / conjuntos:

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

Eu quero encontrar a união, intersecção e diferença das matrizes 'esquerda' e 'direita'. Melhor ainda, pictorially eu quero encontrar:

União - "[vermelho", "verde", "azul"]

Interseção - "[verde"]

Diferença simétrica - "[vermelho", "azul"]

questionAnswers(2)

yourAnswerToTheQuestion