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

दी गई शर्त के साथ डेटा का चयन कैसे करें

संपादित करें

इस तरह की संरचना होना:

{
    "_id" : ObjectId("575e4c8731dcfb59af388e1d"),
    "name" : "Maria",
    "providers" : [ 
        {
            "type" : "facebook",
            "data" : "fb.com",
            "privacy" : true
        }, 
        {
            "type" : "twitter",
            "data" : "twitter.com",
            "privacy" : false
        }, 
        {
            "type" : "google",
            "data" : "google.com",
            "privacy" : true
        }, 
        {
            "type" : "phno",
            "data" : "+1-1289741824124",
            "privacy" : true
        }
    ]
}

इस तरह की क्वेरी के साथ:

db.maria.aggregate([{
            $project : {
                _id : 1,
                name : 1,
                "providers" : {
                    $filter : {
                        input : "$providers",
                        as : "p",
                        cond : {
                            $eq : ["$$p.privacy", true]
                        }
                    }
                }
            }
        }
    ])
    ])

हम गतिशील आउटपुट प्राप्त कर रहे हैं, और हमें प्रदाता के नाम पर ध्यान देने की आवश्यकता नहीं है क्योंकि यह सामान्य संरचना द्वारा कवर किया गया है

{
    "providers" : [ 
        {
            "type" : "facebook",
            "data" : "fb.com",
            "privacy" : true
        }, 
        {
            "type" : "google",
            "data" : "google.com",
            "privacy" : true
        }, 
        {
            "type" : "phno",
            "data" : "+1-1289741824124",
            "privacy" : true
        }
    ],
    "name" : "Maria"
}

संपादन की समाप्ति

जिस तरह से आप इसे प्राप्त कर सकते हैं वह एकत्रीकरण ढांचे का उपयोग कर रहा है। चूंकि हमारे पास प्रत्येक क्षेत्र के लिए एक सरणी है, हमें पहले इसे खोलना होगा, फिर हम $project का उपयोग कर सकते हैं फ़ील्ड मान या बस शून्य सेट करने के लिए। जैसा कि यह एक साधारण प्रश्न की तरह दिखता है, यह थोड़ी परेशानी दे सकता है। जिस तरह से हम सुधार कर सकते हैं वह है दस्तावेज़ संरचना को बदलना, प्रदाताओं की एक सरणी और सरल प्रदाता टाइप फ़ील्ड रखना।

नीचे एकत्रीकरण चरण:

db.maria.find()
var unwindFb = {
    $unwind : "$facebook"
}
var unwindtw = {
    $unwind : "$twitter"
}
var unwindgo = {
    $unwind : "$google"
}
var unwindph = {
    $unwind : "$phno"
}
var project = {
    $project : {
        _id : 1,
        name : 1, // list other fields here

        facebook : {
            $cond : {
                if  : {
                    $gte : ["$facebook.privacy", true]
                },
            then : [{
                    data : "$facebook.data",
                    privacy : "$facebook.privacy"
                }
            ],
            else  : null
        }
    },
    twitter : {
        $cond : {
            if  : {
                $gte : ["$twitter.privacy", true]
            },
        then : [{
                data : "$twitter.data",
                privacy : "$twitter.privacy"
            }
        ],
        else  : null
    }
},
google : {
    $cond : {
        if  : {
            $gte : ["$google.privacy", true]
        },
    then : [{
            data : "$google.data",
            privacy : "$google.privacy"
        }
    ],
    else  : null
}
},
phno : {
    $cond : {
        if  : {
            $gte : ["$phno.privacy", true]
        },
    then : [{
            data : "$phno.data",
            privacy : "$phno.privacy"
        }
    ],
    else  : null
}
}
}
}

db.maria.aggregate([unwindFb, unwindtw, unwindgo, unwindph, project])

तब आउटपुट इस तरह दिखता है:

{
    "_id" : ObjectId("575df49d31dcfb59af388e1a"),
    "name" : "Maria",
    "facebook" : [ 
        {
            "data" : "fb.com",
            "privacy" : true
        }
    ],
    "twitter" : null,
    "google" : [ 
        {
            "data" : "google.com",
            "privacy" : true
        }
    ],
    "phno" : [ 
        {
            "data" : "+1-1289741824124",
            "privacy" : true
        }
    ]
}


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongodb monogorestore रूट डायरेक्टरी एक ही डेटाबेस का डंप होना चाहिए

  2. मोंगोडीबी में, मैं एक बड़ी क्वेरी का उपयोग कर रहा हूं, मैं कंपाउंड इंडेक्स या सिंगल इंडेक्स कैसे बनाऊंगा, इसलिए मेरा प्रतिक्रिया समय बढ़ जाता है

  3. एकाधिक चाबियों के साथ कुशलतापूर्वक विशिष्ट प्रदर्शन कैसे करें?

  4. मैं एक नेवला स्कीमा का सबसेट वापस करने के लिए कैसे फ़िल्टर करूं?

  5. स्प्रिंग डेटा मोंगोडब आईडी फील्ड मैपिंग