Cómo agrupar, distinguir y agregar campos en MongoDB
Tengo una colección de documentos como los siguientes:
{
'_id': ,
'group': 'group1',
'name': 'car; pet; bike'
},
{
'_id': ,
'group': 'group1',
'name': 'car; pet; plant'
},
{
'_id': ,
'group': 'group2',
'name': 'music; toy; cat'
},
{
'_id': ,
'group': 'group2',
'name': 'dog'
},
{
'_id': ,
'group': 'group3',
'name': 'star; planet'
}
Necesito usar .aggregate()
para obtener lo siguiente:
{
'_id': ,
'group': 'group1',
'name': 'car; pet; bike; plant'
},
{
'_id': ,
'group': 'group2',
'name': 'music; toy; cat; dog'
},
{
'_id': ,
'group': 'group3',
'name': 'star; planet'
}
Por lo tanto, el resultado es un grupo del campo group
y concatenar el campo name
haciendo una distinción en los valores.
No pude entender cómo hacerlo.
¿Cómo se puede hacer?
davy.ai
Para lograr el resultado deseado, podemos usar la etapa
$group
de MongoDB en combinación con los operadores$addToSet
y$concat
dentro del método.aggregate()
.Se puede utilizar el siguiente código:
Explicación:
– La etapa
$group
agrupa los documentos basados en el campogroup
y agrega todos los valores distintos dename
a un array utilizando$addToSet
.– La etapa
$project
se utiliza para reformar el resultado. El operador$reduce
se utiliza para concatenar los valores dename
dentro del array para cada grupo. El operador$cond
se utiliza para manejar el caso donde el array está vacío. El resultado se asigna al camponame
. El campo_id
se excluye y el campogroup
se asigna con el valor de_id
.Esto debería producir el resultado deseado.