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

mongoDB:कैसे उल्टा $अनविंड

इसे कैसे संभाला जाता है, इसके लिए एक विशेष तरकीब है, लेकिन सबसे पहले यदि आपके पास MongoDB 2.6 या इससे अधिक उपलब्ध है तो आप $unwind . यदि आप बहुत सारे दस्तावेज़ संसाधित कर रहे हैं तो यह प्रदर्शन के लिए बहुत उपयोगी हो सकता है।

यहां प्रमुख ऑपरेटर हैं $map जो सरणी को जगह में संसाधित करता है और $allElementsTrue ऑपरेटर जो आपके "परिणाम" फ़ील्ड का मूल्यांकन करेगा। यहां "मानचित्र" का उपयोग आंतरिक "परीक्षण" सरणी के दोनों परीक्षणों को यह देखने की अनुमति देता है कि वहां "परिणाम" फ़ील्ड सभी सही स्थिति को पूरा करते हैं। बाहरी सरणी मामले में, यह "परिणाम" उन दस्तावेज़ों में रखा जा सकता है जिनकी आपको आवश्यकता है, और निश्चित रूप से दस्तावेज़ के लिए पूर्ण मूल्यांकन समान नियमों का पालन करता है:

db.test.aggregate([
    { "$project": {
        "name": 1,
        "result": {
            "$allElementsTrue": {
                "$map": {
                    "input": "$acts",
                    "as": "act",
                    "in": {
                        "$allElementsTrue": {
                            "$map": {
                                 "input": "$$act.tests",
                                 "as": "test",
                                 "in": "$$test.result"
                            }
                        }
                    }
                }
            }
        },
        "acts": {
            "$map": {
                 "input": "$acts",
                 "as": "act",
                 "in": {
                    "name": "$$act.name",
                    "result": {
                        "$allElementsTrue": {
                            "$map": {
                                "input": "$$act.tests",
                                "as": "test",
                                "in": "$$test.result"
                            }
                        }
                    },
                    "tests": "$$act.tests"
                 }
            }
        }
    }}
])

पुराने संस्करणों में ऐसा करने के लिए आपको $group दो चरणों में वापस उन "परिणाम" फ़ील्ड पर परीक्षण करते समय सरणियों को "पुनर्निर्माण" करने के लिए। यहां दूसरा अंतर $min ऑपरेटर के रूप में false true . से कम मान माना जाएगा और उसी "allElements" अवधारणा का मूल्यांकन करता है:

db.test.aggregate([
    { "$unwind": "$acts" },
    { "$unwind": "$acts.tests" },
    { "$group": {
        "_id": {
            "_id": "$_id",
            "name": "$name",
            "actName": "$acts.name"
        },
        "result": { "$min": "$acts.tests.result" },
        "tests": {
           "$push": {
               "name": "$acts.tests.name",
               "result": "$acts.tests.result"
           }
        }
    }},
    { "$group": {
        "_id": "$_id._id",
        "name": { "$first": "$_id.name" },
        "result": { "$min": "$result" },
        "acts": {
            "$push": {
                "name": "$_id.actName",
                "result": "$result",
                "tests": "$tests"
            }
        }
    }}
])



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB/Mongoose - तिथि के अनुसार वस्तुओं की एक सरणी को क्वेरी करना

  2. MongoDB क्वेरी को Java में बदलें

  3. Ubuntu पर MongoDB को कैसे स्थापित और कॉन्फ़िगर करें

  4. Node.js मोंगोस्किन के साथ वादा करता है

  5. मोंगोइड 3 - मानचित्र तक पहुंचें_परिणाम कम करें