MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongodb kombiniert aggregierte Abfragen

Sie können unkorrelierte Unterabfragen verwenden, die ab MongoDB v3.6 verfügbar sind

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-Spielplatz

Um die Leistung zu verbessern, schlage ich vor, dass Sie die Referenz-IDs als ObjectId speichern Sie müssen sie also nicht in jedem Schritt konvertieren.