es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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

Tags:  , , ,

Answer

  1. Avatar for 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:

    {
      $lookup: {
        from: 'world',
        let: { collectionName: '$collection_name' },
        pipeline: [
          {
            $match: {
              $expr: { $eq: ['$_id', '$$collectionName'] }
            }
          },
          {
            $project: {
              targetJoinField: 'field_name' // Reemplace 'field_name' con el nombre del campo deseado en la colección objetivo
            }
          }
        ],
        as: 'joined_collection'
      }
    }
    

    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!

Comments are closed.