sql >> Database teknologi >  >> NoSQL >> MongoDB

Aggregation med flere kriterier og sum match baseret på tæller nøglen

Da der er to samlinger, skal vi bruge

  • $lookup at deltage i slæbesamlinger. Her brugte jeg ukorreleret underforespørgsler
  • Aggregeringen udføres i colA samlinger, men inde i lookup s pipeline vi udfører aggregering på colB . $unwind hjælper med at destrukturere items . $match hjælper med at fjerne uønskede data (kampstadiet kræver $expr ).
  • Når vores join er lykkedes, skal vi bare tælle arrayet ved hjælp af $size
  • $reduce hjælper med at summere matrixværdien af ​​size

Mongo-scriptet er givet nedenfor.

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

Arbejd Mongo legeplads




  1. Hvordan genereres MongoDB's ObjectId'er?

  2. Mongoose:Cast til ObjectId mislykkedes

  3. Mongoose Filter baseret på dynamisk datonøgle med værdi

  4. Mac(os x):Er der en måde at installere KUN redis-cli på?