MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Làm cách nào tôi có thể thực hiện bộ lọc tổng hợp Mongodb cho nhiều bộ sưu tập?

Tôi đã giải thích sự cố trước đây của bạn trong Câu hỏi . Vì billInfo là một mảng và invoiceData cũng là một mảng bên trong invoiceInfo , chúng tôi sử dụng bản đồ và bộ lọc. Sau đó, chúng ta cần loại trừ mảng invoiceData trống . (Điều này có thể được thực hiện ở bước trước cũng giống như filter-map-> filter, nhưng nó có thể dài dòng, đó là lý do tại sao tôi sử dụng nó trong giai đoạn tiếp theo)

Đây là mã

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

Làm việc Sân chơi Mongo

Hy vọng điều này sẽ giúp bạn. Đây là lúc bạn cần chơi / giải quyết dựa trên yêu cầu của bạn. Đôi khi bạn cần phải tra cứu trước hoặc sau vị trí hiện tại trong bản demo




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Khung tổng hợp Mongodb | Nhóm trên nhiều giá trị?

  2. Các mảng lồng nhau trong Mongoose

  3. C # Mongo DeleteMany - mà không cần sử dụng một lớp

  4. Truy vấn mảng lồng nhau MongoDB

  5. Làm cách nào để xuất tất cả các bộ sưu tập trong MongoDB?