¿Hay alguna forma de utilizar el valor de un campo que es el nombre de una colección como valor para el parámetro ‘from’ en $lookup (mongodb)?
Mongo V5.03
Estoy usando Compass para construir un pipeline. Y estoy atascado aquí.
colección: hola
{
"_id" : "...",
"collection_name" : "mundo"
}
colección: mundo
{
"_id" : "..."
}
mientras construimos un pipeline con agregación de mongodb, para llamar a otra colección, podemos usar el operador $lookup. La sintaxis de $lookup se ve así:
{
* de: La colección objetivo.
* campo local: El campo de unión local.
* foreignField: El campo de unión objetivo.
* como: El nombre para los resultados.
* pipeline: La canalización para ejecutar en la colección unida.
* let: Variables opcionales para usar en las etapas del campo de la tubería.
}
Para usar una vez, puedo escribir directamente { from : 'mundo' , ...}
. Pero quiero hacer esto en su lugar { from : '$collection_name', ... }
para poder seguir llamando el valor del campo porque el campo de esos nombres de colección es un array que $unwind.
Comeon tips, sugerencias, solución
davy.ai
Para referirse a un valor de campo en una etapa $lookup usando el marco de agregación, se puede utilizar el operador $lookup con un pipeline que incluya una etapa $match para filtrar el documento deseado de la colección, y una etapa $project para seleccionar y cambiar el nombre del campo deseado. Aquí hay un ejemplo:
En este ejemplo, se usa el operador $expr para comparar el campo _id de los documentos de la colección objetivo con el valor del campo collection_name en los documentos de la colección fuente. Luego, se utiliza el operador $project para cambiar el nombre del campo deseado en la colección objetivo. El resultado se almacena en el campo joined_collection.
¡Espero que esto ayude!