sql >> データベース >  >> NoSQL >> MongoDB

複数のコレクションに対してMongodbaggrigateフィルターを実行するにはどうすればよいですか?

    質問 で以前の問題について説明しました 。 invoiceInfoは配列であり、invoiceData invoiceInfo内の配列も 、マップとフィルターを使用します。次に、invoiceDataの空の配列を除外する必要があります 。 (これは、filter-map-> filterのように前のステップでも実行できますが、時間がかかる可能性があるため、次の段階で使用しました)

    これがコードです

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

    作業中Mongo遊び場

    これがお役に立てば幸いです。これは、要件に基づいてプレイ/回避する必要がある時間です。デモで現在地の前後にルックアップを行う必要がある場合があります




    1. rlimit MacOSX10.8を増やす

    2. タイムエクスプレスとredisセッションの有効期限

    3. MeteorJSテンプレートにデータが表示されない、表示されない

    4. MongoDB findOne()