sql >> Databáze >  >> NoSQL >> MongoDB

Agregace s více kritérii a shoda součtů na základě klíče počtu

Protože existují dvě kolekce, musíme použít

  • $lookup zapojit se do sbírek vleků. Zde jsem použil nesouvisející dílčí dotazy
  • Agregace se provádí v colA sbírek, ale uvnitř lookup pipeline uživatele provádíme agregaci na colB . $unwind pomáhá de-strukturovat items . $match pomáhá eliminovat nežádoucí data (fáze zápasu vyžaduje $expr ).
  • Jakmile bude naše spojení úspěšné, musíme pole spočítat pomocí $size
  • $reduce pomáhá sečíst hodnotu pole size

Skript mongo je uveden níže.

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"
            ]
          }
        }
      }
    }
  }
])

Pracovní Hřiště Mongo




  1. Aplikace podobná Twitteru využívající MongoDB

  2. pole s jedinečnými hodnotami ve všech dokumentech jedné kolekce

  3. Java/MongoDB dotaz podle data

  4. Jak najít dokument a jeden vnořený dokument odpovídající daným kritériím v kolekci MongoDB