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

मोंगो एकत्रीकरण का उपयोग करके विभिन्न दस्तावेजों के मूल्यों के बीच अंतर की गणना कैसे करें?

सिद्धांत रूप में कठिन प्रश्न, लेकिन मैं आपके द्वारा प्रस्तुत दो दस्तावेजों के सरलीकृत मामले के साथ रहने जा रहा हूं और उसके आसपास एक समाधान का आधार बनाऊंगा। अवधारणाएं सारगर्भित होनी चाहिए, लेकिन विस्तारित मामलों के लिए अधिक कठिन हैं। एकत्रीकरण ढांचे के साथ संभव सामान्य तौर पर:

db.collection.aggregate([
    // Match the documents in a pair
    { "$match": {
        "timeMilliSec": { "$in": [ 1414590255, 1414590245 ] }
    }}

    // Trivial, just keeping an order
    { "$sort": { "timeMilliSec": -1 } },

    // Unwind the arrays
    { "$unwind": "$data" },

    // Group first and last
    { "$group": {
        "_id": "$data.name",
        "firstX": { "$first": "$data.x" },
        "lastX": { "$last": "$data.x" },
        "firstY": { "$first": "$data.y" },
        "lastY": { "$last": "$data.y" }
    }},

    // Difference on the keys
    { "$project": {
        "diff": {
            "$divide": [
                { "$subtract": [ "$firstX", "$lastX" ] },
                { "$subtract": [ "$firstY", "$lastY" ] }
            ]
        }
    }},

    // Not sure you want to take it this far
    { "$group": {
        "_id": null,
        "diffX": { 
            "$min": {
                "$cond": [
                     { "$eq": [ "$_id", "X" ] },
                     "$diff",
                     false
                 ]
            }
        },
        "diffY": { 
            "$min": {
                "$cond": [
                     { "$eq": [ "$_id", "Y" ] },
                     "$diff",
                     false
                 ]
            }
        }
    }}
])

संभावित रूप से अतिरंजित, इरादे के बारे में निश्चित नहीं है, लेकिन नमूने के आधार पर इसका आउटपुट होगा:

{ 
    "_id" : null, 
    "diffX" : 0.14285714285714285, 
    "diffY" : 0.6 
}

जो गणनाओं से मेल खाता है।

आप अपने मामले के अनुकूल हो सकते हैं, लेकिन सामान्य सिद्धांत जैसा दिखाया गया है।

अंतिम "पाइपलाइन" चरण थोड़ा "चरम" है क्योंकि जो कुछ किया जाता है वह परिणामों को एक दस्तावेज़ में जोड़ता है। अन्यथा, "X" और "Y" परिणाम दो . में पहले ही प्राप्त हो चुके हैं पाइपलाइन में दस्तावेज। अधिकतर $group द्वारा $first के साथ संचालन और $last समूह सीमा पर संबंधित तत्वों को खोजने के लिए संचालन।

$project में परवर्ती संचालन एक पाइपलाइन चरण के रूप में विशिष्ट परिणामों को निर्धारित करने के लिए आवश्यक गणित करता है। देखें एकत्रीकरण ऑपरेटर अधिक विवरण के लिए, विशेष रूप से $divide और $subtract

आप जो कुछ भी करते हैं आप इस कोर्स का पालन करते हैं। अपनी दो चाबियों पर "प्रारंभ" और "अंत" जोड़ी प्राप्त करें। फिर गणना करें।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. प्ले मॉर्फिया को फिर से शुरू करने के बाद सभी विफल हो जाते हैं

  2. क्या नेवला अपरर्ट ऑपरेशन अद्यतन/डिफ़ॉल्ट स्कीमा मानों को नवीनीकृत करता है?

  3. स्प्रिंग बूट / मोंगो इंडेक्स एनोटेशन के साथ इंडेक्स नहीं बनाएंगे

  4. मोंगोडब में अधिकतम और न्यूनतम

  5. मोंगोडीबी ओपनसोर्स बनाम मोंगोडीबी एंटरप्राइज