sql >> Database >  >> NoSQL >> MongoDB

Aggregatie met meerdere criteria en somovereenkomst op basis van de telsleutel

Aangezien er twee verzamelingen zijn, moeten we

  • $lookup om deel te nemen aan sleepcollecties. Hier gebruikte ik uncorelated subquery's
  • De aggregatie wordt uitgevoerd in colA collecties, maar binnen de lookup 's pipeline we voeren aggregatie uit op colB . $unwind helpt bij het de-structureren van de items . $match helpt bij het elimineren van ongewenste gegevens (overeenkomstfase vereist $expr ).
  • Zodra onze samenvoeging is geslaagd, hoeven we alleen de array te tellen met $size
  • $reduce helpt bij het optellen van de arraywaarde van size

Het mongo-script wordt hieronder gegeven.

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

Werkende Mongo-speeltuin




  1. MongoDB Vervang specifieke array-waarden

  2. .NET best practices voor MongoDB-verbindingen?

  3. Tips voor het beheren van uw databaseconfiguraties

  4. MongoDB-prestaties - meerdere databases hebben