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

मोंगोडब मानदंड से मेल खाने वाली सभी वस्तुओं में सभी सरणी तत्वों की गणना करता है

ऐसा करने का सबसे "प्रदर्शनकारी" तरीका है $unwind . को छोड़ देना कुल मिलाकर और बस $group गिनती करने के लिए। अनिवार्य रूप से "फ़िल्टर" सरणियों को $size . मिलता है परिणामों में से $sum :

db.objects.aggregate([
    { "$match": {
        "createddate": {
            "$gte": ISODate("2015-08-30T00:00:00.000Z")
        },
        "activity.action": "test_action"
    }},
    { "$group": {
        "_id": null,
        "count": {
            "$sum": {
                "$size": {
                    "$setDifference": [
                        { "$map": {
                            "input": "$activity",
                            "as": "el",
                            "in": {
                                "$cond": [ 
                                    { "$eq": [ "$$el.action", "test_action" ] },
                                    "$$el",
                                    false
                                ]
                            }               
                        }},
                        [false]
                    ]
                }
            }
        }
    }}
])

MongoDB की भावी रिलीज़ में $filter होगा , जो इसे और अधिक सरल बनाता है:

db.objects.aggregate([
    { "$match": {
        "createddate": {
            "$gte": ISODate("2015-08-30T00:00:00.000Z")
        },
        "activity.action": "test_action"
    }},
    { "$group": {
        "_id": null,
        "count": {
            "$sum": {
                "$size": {
                    "$filter": {
                        "input": "$activity",
                        "as": "el",
                        "cond": {
                            "$eq": [ "$$el.action", "test_action" ]
                        }
                    }
                }
            }
        }
    }}
])

$unwind . का उपयोग करना दस्तावेज़ों को डी-सामान्यीकृत करने का कारण बनता है और प्रभावी रूप से प्रति सरणी प्रविष्टि की एक प्रति बनाता है। जहां संभव हो आपको अक्सर अत्यधिक लागत के कारण इससे बचना चाहिए। प्रति दस्तावेज़ सरणी प्रविष्टियों को फ़िल्टर करना और गिनना तुलनात्मक रूप से बहुत तेज़ है। जैसा कि एक साधारण $match है और $group कई चरणों की तुलना में पाइपलाइन।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $setEquals

  2. mongoexport JSON पार्सिंग त्रुटि

  3. मोंगोडब में एक कंपाउंड इंडेक्स की संरचना कैसे करें

  4. मैं कैसे देख सकता हूं कि मोंगो खोल से मोंगो कौन से बंदरगाह सुन रहा है?

  5. गो आधिकारिक ड्राइवर का उपयोग करके एडटॉसेट कैसे करें?