MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Bagaimana saya bisa melakukan filter agregat Mongodb untuk banyak koleksi?

Saya telah menjelaskan masalah Anda sebelumnya di Pertanyaan . Karena invoiceInfo adalah array dan invoiceData juga array di dalam invoiceInfo , kami menggunakan peta dan filter. Maka kita perlu mengecualikan array kosong invoiceData . (Hal ini dapat dilakukan pada langkah sebelumnya juga seperti filter-map->filter, tetapi bisa menjadi panjang, itu sebabnya saya menggunakannya di tahap selanjutnya)

Ini kodenya

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

Bekerja Taman bermain Mongo

Semoga ini bisa membantu Anda. Ini adalah waktu yang Anda butuhkan untuk bermain / solusi berdasarkan kebutuhan Anda. Terkadang Anda perlu melakukan pencarian sebelum atau sesudah lokasi saat ini di demo




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. menanyakan koleksi tanpa melewati skema di luwak

  2. Luwak:jalur kesalahan validasi diperlukan

  3. Luwak:Koleksi tidak terisi saat digunakan sebagai referensi di dokumen lain

  4. UnhandledPromiseRejectionPeringatan:MongooseServerSelectionError

  5. Bagaimana cara mengembalikan hanya bidang tertentu untuk kueri di Spring Data MongoDB?