sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongodb kombinerar aggregerade frågor

Du kan använda okorrelerade underfrågor, tillgängliga från MongoDB v3.6

db.Profile.aggregate([
  {
    $match: { is_del: false }
  },
  {
    $lookup: {
      from: "Store",
      as: "stores",
      let: {
        pid: { $toString: "$_id" }
      },
      pipeline: [
        {
          $match: {
            is_del: false,
            $expr: { $eq: ["$$pid", "$id"] }
          }
        },
        {
          $lookup: {
            from: "Item",
            as: "items",
            let: {
              sid: { $toString: "$_id" }
            },
            pipeline: [
              {
                $match: {
                  is_del: false,
                  $expr: { $eq: ["$$sid", "$sid"] }
                }
              },
              {
                $count: "count"
              }
            ]
          }
        },
        {
          $unwind: "$items"
        }
      ]
    }
  }
])

Mongo Playground

För att förbättra prestandan föreslår jag att du lagrar referens-id:t som ObjectId så att du inte behöver konvertera dem i varje steg.




  1. Hur tar man bort många mongodb-samlingar på en gång?

  2. Vad är resultatet av en filström?

  3. mongodb hur man får maxvärde från samlingar

  4. Underscheman på Mongoose utan matriser