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

Agregación con criterios múltiples y coincidencia de suma basada en la clave de conteo

Como hay dos colecciones, necesitamos usar

  • $lookup para unirse a las colecciones de remolque. Aquí usé no correlacionado subconsultas
  • La agregación se realiza en colA colecciones, pero dentro de la lookup pipeline de 's realizamos la agregación en colB . $unwind ayuda a desestructurar los items . $match ayuda a eliminar datos no deseados (la etapa de coincidencia requiere $expr ).
  • Una vez que nuestra unión se haya realizado correctamente, solo necesitamos contar la matriz usando $size
  • $reduce ayuda a sumar el valor de la matriz de size

El script mongo se proporciona a continuación.

db.colA.aggregate([
  {
    $lookup: {
      from: "colB",
      let: {
        bid: "$_id"
      },
      pipeline: [
        {
          $match: {
            $or: [
              {
                is_delete: false
              },
              {
                is_delete: {
                  "$exists": false
                }
              }
            ]
          }
        },
        {
          $unwind: "$items"
        },
        {
          $match: {
            $expr: {
              $eq: [
                "$items._id",
                "$$bid"
              ]
            }
          }
        },
        
      ],
      as: "data"
    }
  },
  {
    $project: {
      count: {
        $reduce: {
          input: "$data",
          initialValue: 0,
          in: {
            $add: [
              "$$value",
              "$$this.items.size"
            ]
          }
        }
      }
    }
  }
])

Trabajando parque infantil de Mongo