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

làm cách nào để tôi có thể tìm một mảng giá trị trong tổng hợp $ match và nhóm kết quả?

Bạn cần thay đổi filters của mình như hình dưới đây.

Giải thích

  1. Chúng tôi bao gồm các bộ lọc trong cấu trúc tài liệu với $addFields nhà điều hành. Điều này sẽ giúp chúng tôi tính toán tất cả các giá trị cần thiết.
  2. Chúng tôi lọc toys với các filters được bao gồm gần đây thuộc tính $expr toán tử.
  3. Áp dụng bộ lọc $filter nhà điều hành, chúng tôi nhận được tất cả đồ chơi có cùng một mã code từ filters . Bây giờ, chúng ta có thể tính toán totalprice_total giá trị.
  4. Chúng tôi có thể tính toán total_coincidences bên trong $group giai đoạn như thế này:

Nhưng, bạn đã đề cập đến "yếu tố khác biệt". Vì vậy, chúng tôi tạo bộ mã đồ chơi duy nhất và đếm các món đồ trong bộ.

db.collection.aggregate([
  {
    $unwind: "$toys"
  },
  {
    $addFields: {
      "filters": [
        {
          "code": 17001,
          "quantify": 2
        },
        {
          "code": 17003,
          "quantify": 4
        },
        {
          "code": 17005,
          "quantify": 5
        },
        {
          "code": 17005,
          "quantify": 6
        }
      ]
    }
  },
  {
    $match: {
      $expr: {
        $in: [ "$toys.code", "$filters.code"]
      }
    }
  },
  {
    $group: {
      _id: "$toystore_name",
      total_coincidences: {
        $addToSet: "$toys.code"
      },
      toy_array: {
        $push: {
          "price_original": "$toys.price",
          "toy": "$toys.toy",
          "total": {
            $size: {
              $filter: {
                input: "$filters",
                cond: {
                  $eq: [ "$$this.code", "$toys.code"]
                }
              }
            }
          },
          price_total: {
            $sum: {
              $map: {
                input: {
                  $filter: {
                    input: "$filters",
                    cond: {
                      $eq: [ "$$this.code", "$toys.code" ]
                    }
                  }
                },
                in: {
                  $multiply: [ "$toys.price", "$$this.quantify" ]
                }
              }
            }
          }
        }
      }
    }
  },
  {
    $addFields: {
      total_coincidences: {
        $size: "$total_coincidences"
      }
    }
  },
  {
    $sort: { _id: 1 }
  }
])

MongoPlayground




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cấu trúc liên kết đã bị phá hủy khi sử dụng MongoDB với trình điều khiển gốc và Express.js

  2. Cách xóa tài liệu bên trong một mảng trong mongodb bằng cách sử dụng $ pull

  3. Bắt Spark, Python và MongoDB làm việc cùng nhau

  4. Làm cách nào để loại bỏ cơ sở dữ liệu MongoDB khỏi dòng lệnh?

  5. Làm thế nào để lấy nhiều đối tượng JSON bằng cách sử dụng nodejs và mongoose?