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

Hvordan kan jeg lave Mongodb aggrigatfilter til flere indsamlinger?

Jeg har forklaret dit tidligere problem i Spørgsmål . Da invoiceInfo er et array og invoiceData også et array inde i invoiceInfo , vi bruger kort og filter. Så skal vi udelukke tom matrix af invoiceData . (Dette kan også gøres i forrige trin ligesom filter-map->filter, men det kan være langt, det er derfor, jeg brugte det i næste trin)

Her er koden

db.bookings.aggregate([
  {
    "$match": {
      "PaymentStatus": { $ne: "Delivered" }
    }
  },
  {
    $set: {
      "BookingData.products": {
        "$filter": {
          "input": "$BookingData.products",
          "cond": {
            $and: [
              { $ne: [ "$$this.ProductID", undefined ] },
              { $ne: [ "$$this._id", null ] },
              { $ne: [ "$$this.IsDeliveryFailed", "Yes" ] }
            ]
          }
        }
      }
    }
  },
  {
    "$lookup": {
      "from": "invoices",
      "localField": "Invoices",
      "foreignField": "_id",
      "as": "invoiceInfo"
    }
  },
  {
    $set: {
      invoiceInfo: {
        $map: {
          input: "$invoiceInfo",
          as: "info",
          in: {
            InvoiceData: {
              $filter: {
                input: "$$info.InvoiceData",
                as: "data",
                "cond": {
                  $and: [
                    { $ne: [ "$$data.InvoiceID", undefined ] },
                    { $ne: [ "$$data.InvoiceID", null ] },
                    { $ne: [ "$$data.IsPaymentFailed", "Yes" ] }
                  ]
                }
              }
            }
          }
        }
      }
    }
  },
  {
    $set: {
      invoiceInfo: {
        $filter: {
          input: "$invoiceInfo",
          cond: { $ne: [ "$$this.InvoiceData", [] ] }
        }
      }
    }
  },
  {
    $match: {
      $expr: {
        $or: [
          { $ne: [ "$BookingData.products", [] ] },
          { $ne: [ "$invoiceInfo", [] ] }
        ]
      }
    }
  }
])

Arbejd Mongo legeplads

Håber dette vil hjælpe dig. Dette er den tid, du har brug for til at spille/løsning ud fra dine krav. Nogle gange skal du foretage opslag før eller efter den aktuelle placering i demoen




  1. Er der en måde at forhindre MongoDB i at tilføje flertalsform til samlingsnavne?

  2. Modellering for venner-skema i mongoose?

  3. Mongo-fejl ved brug af aggregering:sortering overskredet hukommelsesgrænsen

  4. Node Js:Redis-jobbet er ikke afsluttet efter at have afsluttet sin opgave