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

¿Cómo puedo realizar combinaciones anidadas (unir 3 o más colecciones) en una canalización de agregación de MongoDB?

Realice una búsqueda anidada usando buscar con canalización ,

  • $lookup con orders colección,
    • let , define la variable customer_id eso es de la colección principal, para acceder a esta variable de referencia dentro de la canalización usando $$ como $$customer_id ,
    • pipeline puede agregar etapas de canalización igual que lo hacemos en la canalización de nivel raíz
    • $expr cada vez que hacemos coincidir campos internos, se requiere una condición de coincidencia de expresión, por lo que $$customer_id es el campo de la colección principal que se declaró en let y $customer_id es el campo de la colección secundaria/colección actual
  • $lookup con orderitems colección
db.customers.aggregate([
  {
    $lookup: {
      from: "orders",
      let: { customer_id: "$customer_id" },
      pipeline: [
        { $match: { $expr: { $eq: ["$$customer_id", "$customer_id"] } } },
        {
          $lookup: {
            from: "orderitems",
            localField: "order_id",
            foreignField: "order_id",
            as: "items"
          }
        }
      ],
      as: "orders"
    }
  }
])

Patio de juegos