sql >> Base de Datos >  >> NoSQL >> MongoDB

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

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.