MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

मैं $match एकत्रीकरण में मानों की एक सरणी कैसे ढूंढ सकता हूं और परिणाम को समूहित कर सकता हूं?

आपको अपने filters बदलने की आवश्यकता है जैसा कि नीचे दिखाया गया है।

स्पष्टीकरण

  1. हम $addFields . के साथ दस्तावेज़ संरचना में फ़िल्टर शामिल करते हैं ऑपरेटर। यह हमें सभी आवश्यक मूल्यों की गणना करने में मदद करेगा।
  2. हम toys फ़िल्टर करते हैं हाल ही में शामिल filters . के साथ $expr . के साथ विशेषता ऑपरेटर।
  3. $filter लागू करना ऑपरेटर, हम सभी खिलौनों को एक ही code . के साथ प्राप्त करते हैं filters . से . अब, हम total की गणना कर सकते हैं और price_total मान।
  4. हम total_coincidences की गणना कर सकते हैं $group . के अंदर इस तरह मंच:

लेकिन, आपने "विशिष्ट तत्व" का उल्लेख किया है। इसलिए, हम अद्वितीय टॉय कोड का सेट बनाते हैं और सेट में आइटम गिनते हैं।

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. MongoDB C# ड्राइवर का उपयोग करना:लपेटा या अन-लिपटा?

  2. MongoDB में एक कॉलम का उच्चतम मूल्य प्राप्त करना

  3. mongodb . में $sum के साथ योग करें

  4. मैं मोंगोडब या रोबोमोंगो का उपयोग करके मूल्य सकारात्मक और नकारात्मक मूल्य की गणना कैसे कर सकता हूं?

  5. मोंगोडब में फ़ील्ड कैसे बढ़ाएं?