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

MongoDB समूह और विभिन्न दस्तावेज़ों से मूल्यों को घटाना

आपको सबसे पहले एक सशर्त $sum की आवश्यकता है $cond पर आधारित प्रत्येक मान के लिए समूह में ऑपरेटर। फिर आप अलग से $subtract कर सकते हैं :

db.gas.aggregate([
    { "$group": {
        "_id": "$timestamp",
        "gas-in": { 
            "$sum": { 
                "$cond": [
                    { "$eq": [ "$sensor", "gas-in" ] },
                    "$value", 
                    0
                ]
            }
        },
        "gas-out": { 
            "$sum": { 
                "$cond": [
                    { "$eq": [ "$sensor", "gas-out"] },
                    "$value", 
                    0
                ]
            }
        },
    }},
    { "$project": {
        "gasdifference": { "$subtract": [ "$gas-in", "$gas-out" ] }
    }}
])

जो परिणाम देता है:

{ "_id" : ISODate("2015-09-17T21:20:35Z"), "gasdifference" : 5.5 }
{ "_id" : ISODate("2015-09-17T21:14:35Z"), "gasdifference" : 0.5 }

विकल्प केवल एक चरण के लिए "गैस-आउट" मानों को नकारात्मक बनाना है:

db.gas.aggregate([
    { "$group": {
        "_id": "$timestamp",
        "gasdifference": { 
            "$sum": { 
                "$cond": [
                    { "$eq": [ "$sensor", "gas-in" ] },
                    "$value", 
                    { "$subtract": [ 0, "$value" ] }
                ]
            }
        }
    }}
])

और यह अधिक कुशल होने वाला है।

यदि आपके पास दो से अधिक संभावित "सेंसर" मान हैं तो आप बस $cond को "घोंसला" दें बयान:

db.gas.aggregate([
    { "$group": {
        "_id": "$timestamp",
        "gasdifference": { 
            "$sum": { 
                "$cond": [
                    { "$eq": [ "$sensor", "gas-in" ] },
                    "$value", 
                    { "$cond": [
                        { "$eq": [ "$sensor", "gas-out" ] },
                        { "$subtract": [ 0, "$value" ] },
                        0
                    ]}
                ]
            }
        }
    }}
])

चूंकि वे "टर्नरी" ऑपरेटर हैं (if-then-else ) तो कोई और तर्क "else" कंडीशन में आता है।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. दिनांक फ़ील्ड पर समूहीकरण के बाद दो तिथियों के बीच लापता महीनों को जोड़ने के लिए MongoDB एकत्रीकरण

  2. मोंगो - क्वेरी, एंबेडेड दस्तावेज़ डॉट नोटेशन को छोड़कर मेल नहीं खाता

  3. Mongodb- मौजूदा संग्रह पर अद्वितीय अनुक्रमणिका जोड़ें

  4. मोंगोडब अपरर्ट डुप्लीकेटकीएक्सप्शन फेंक रहा है

  5. स्प्रिंग सुरक्षा + स्प्रिंग डेटा + MongoDB के साथ प्रमाणीकरण