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

bagaimana saya bisa menemukan array nilai dalam agregasi $match dan mengelompokkan hasilnya?

Anda perlu mengubah filters seperti yang ditunjukkan di bawah ini.

Penjelasan

  1. Kami menyertakan filter dalam struktur dokumen dengan $addFields operator. Ini akan membantu kami menghitung semua nilai yang diperlukan.
  2. Kami menyaring toys dengan filters yang disertakan baru-baru ini atribut dengan $expr operator.
  3. Menerapkan $filter operator, kami mendapatkan semua mainan dengan code yang sama dari filters . Sekarang, kita dapat menghitung total dan price_total nilai.
  4. Kita bisa menghitung total_coincidences di dalam $group panggung seperti ini:

Tapi, Anda telah menyebutkan "elemen berbeda". Jadi, kami membuat set kode mainan unik dan menghitung item di set.

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. Kueri agregat/grup/jumlah MongoDB diterjemahkan ke kueri pymongo

  2. Mongoose TypeError:Pengguna bukan konstruktor

  3. lebih dari satu indeks 2dsphere, tidak yakin mana yang harus dijalankan geoNear

  4. Kesalahan Mongod (diinstal dengan homebrew)

  5. Cara terbaik untuk membaca dan memperbarui dokumen mongodb menggunakan pymongo