MongoDB buscar unir arreglo
Tengo una colección con datos que se ven más o menos así:
{
"part": [
{ "a": "1", "b": "a" },
{ "a": "23", "b": "b" },
{ "a": "4", "b": "c" }
]
}
Lo que quiero es una forma de buscar documentos donde la unión de todas las partes “a” sea igual a la búsqueda que estoy buscando.
Por ejemplo, 1234
debería coincidir con el documento anterior, pero 124
no debería.
¿Es esto posible con MongoDB?
davy.ai
Sí, esto es posible con MongoDB utilizando el marco de agregación. Puede utilizar el operador
$reduce
para concatenar todos los valores del campoa
en el arrayparte
, y luego compararlo con el valor de búsqueda utilizando el operador$eq
. Aquí tienes un ejemplo de consulta:Esta consulta utiliza la etapa
$match
para filtrar los documentos donde la concatenación de todos los valores del campoa
en el arrayparte
es igual al valor de búsqueda “1234”. El operador$reduce
se utiliza para concatenar los valores, comenzando con una cadena vacía como valor inicial. El operador$concat
se utiliza dentro del operador$reduce
para concatenar cada valor a la cadena acumulada. Finalmente, el operador$eq
se utiliza para comparar la cadena resultante con el valor de búsqueda.Ten en cuenta que esta consulta solo coincidirá con documentos donde todos los valores
a
en el arrayparte
estén concatenados en el orden correcto. Si quieres permitir que los valores estén en cualquier orden, puedes ordenar el array antes de concatenarlo. Aquí tienes un ejemplo:En esta consulta, la
input
del operador$reduce
se ordena primero por el campoa
antes de concatenar los valores.