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

एक गहरे नेस्टेड दस्तावेज़ क्वेरी में MongoDB के स्थितीय ऑपरेटर $ का उपयोग करना

आपको

. से एक त्रुटि मिलती है
db.users.findOne(
    { username: 'test', 'kingdoms.buildings.type': 'castle' },
    { kingdoms: {$slice: [n, 1]}, 'kingdom.buildings.$': 1 }
);

क्योंकि वर्तनी की गलती है ("किंगडम.बिल्डिंग.$" को "किंगडमs होना चाहिए .builds.$").
हालाँकि, यह तरीका आपकी अपेक्षा के अनुरूप पूरा नहीं कर सकता।
$ हमेशा राज्यों . के उद्देश्य से होता है किंगडम्स.बिल्डिंग . के पथ में - पहली सरणी।

यह एक ऐसा तरीका है जो समस्या को हल करने में सक्षम होना चाहिए।
(V2.6+ आवश्यक)

db.c.aggregate([ {
    $match : {
        username : 'test',
        'kingdoms.buildings.type' : 'castle'
    }
}, {
    $project : {
        _id : 0,
        kingdoms : 1
    }
}, {
    $redact : {
        $cond : {
            "if" : {
                $or : [ {
                    $gt : [ "$kingdoms", [] ]
                }, {
                    $gt : [ "$buildings", [] ]
                }, {
                    $eq : [ "$type", "castle" ]
                } ]
            },
            "then" : "$$DESCEND",
            "else" : "$$PRUNE"
        }
    }
} ]).pretty();

केवल राज्यों . के पहले तत्व को आरक्षित करने के लिए ,

db.c.aggregate([ {
    $match : {
        username : 'test',
        'kingdoms.buildings.type' : 'castle'
    }
}, {
    $redact : {
        $cond : {
            "if" : {
                $or : [ {
                    $gt : [ "$kingdoms", [] ]
                }, {
                    $gt : [ "$buildings", [] ]
                }, {
                    $eq : [ "$type", "castle" ]
                } ]
            },
            "then" : "$$DESCEND",
            "else" : "$$PRUNE"
        }
    }
}, {
    $unwind : "$kingdoms"
}, {
    $group : {
        _id : "$_id",
        kingdom : {
            $first : "$kingdoms"
        }
    }
}, {
    $group : {
        _id : "$_id",
        kingdoms : {
            $push : "$kingdom"
        }
    }
}, {
    $project : {
        _id : 0,
        kingdoms : 1
    }
} ]).pretty();



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. mongodb अंतिम सम्मिलित दस्तावेज़ प्राप्त करें

  2. एक संग्रह में एक स्ट्रिंग फ़ील्ड में सबसे अधिक इस्तेमाल किया जाने वाला शब्द ढूँढना

  3. स्प्रिंग डेटा MongoDB:एकत्रीकरण ढांचा - नेस्टेड संपत्ति के साथ क्रमबद्ध करें अमान्य संदर्भ फेंकता है

  4. लिबर्टी + स्प्रिंग डेटा में कंटेनर प्रबंधित MongoDB कनेक्शन

  5. mongodb गैर-सरणी में $pull/$pullAll संशोधक लागू नहीं कर सकता, सरणी तत्व को कैसे हटाएं