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

MongoDB समग्र चयनात्मक परियोजना

आप सही रास्ते पर लग रहे थे, false . के उन मानों को हटाने के लिए बस अलग-अलग तरीके हैं सशर्त से। आप इसे कुछ भी वापस नहीं कर सकते हैं, लेकिन आप उन मूल्यों से छुटकारा पा सकते हैं जो आप नहीं चाहते हैं।

यदि आप वास्तव में "सेट" चाहते हैं और आपके पास MongoDB 2.6 या अधिक उपलब्ध है, तो आप मूल रूप से false को फ़िल्टर कर सकते हैं $setDifference का इस्तेमाल करने वाले मान :

db.entities.aggregate([
    { "$unwind": "$entities" },
    { "$group": {
        "_id": "$_id",
        "A": { 
            "$addToSet": {
                "$cond": [
                    { "$eq": [ "$entities.type", "A" ] },
                    "$entities.val",
                    false
                ]
            }
        },
        "B": { 
            "$addToSet": {
                "$cond": [
                    { "$eq": [ "$entities.type", "B" ] },
                    "$entities.val",
                    false
                ]
            }
        }
    }},
    { "$project": {
        "A": {
            "$setDifference": [ "$A", [false] ]
        },
        "B": {
            "$setDifference": [ "$B", [false] ]
        }
    }}
])

या केवल एक कदम के रूप में $map<का उपयोग करके /कोड> $project के अंदर ऑपरेटर :

db.entities.aggregate([
    {"$project": {
        "A": {
             "$setDifference": [
                 {
                     "$map": {
                         "input": "$entities",
                         "as": "el",
                         "in": {
                             "$cond": [
                                 { "$eq": [ "$$el.type", "A" ] },
                                 "$$el.val",
                                 false
                             ]
                         }
                     }
                 },
                 [false]
             ]
         },
        "B": {
             "$setDifference": [
                 {
                     "$map": {
                         "input": "$entities",
                         "as": "el",
                         "in": {
                             "$cond": [
                                 { "$eq": [ "$$el.type", "B" ] },
                                 "$$el.val",
                                 false
                             ]
                         }
                     }
                 },
                 [false]
             ]
         }
    }}
])

या अन्यथा सामान्य $unwind और $match इन्हें फ़िल्टर करने के लिए ऑपरेटर:

db.entities.aggregate([
    { "$unwind": "$entities" },
    { "$group": {
        "_id": "$_id",
        "A": { 
            "$push": {
                "$cond": [
                    { "$eq": [ "$entities.type", "A" ] },
                    "$entities.val",
                    false
                ]
            }
        },
        "B": { 
            "$push": {
                "$cond": [
                    { "$eq": [ "$entities.type", "B" ] },
                    "$entities.val",
                    false
                ]
            }
        }
    }},
    { "$unwind": "$A" },
    { "$match": { "A": { "$ne": false } } },
    { "$group": {
        "_id": "$_id",
        "A": { "$push": "$A" },
        "B": { "$first": "$B" }
    }},
    { "$unwind": "$B" },
    { "$match": { "B": { "$ne": false } } },
    { "$group": {
        "_id": "$_id",
        "A": { "$first": "$A" },
        "B": { "$push": "$B" }
    }}
])

या तो $push का उपयोग करना सामान्य सरणियों के लिए या $addToSet अद्वितीय सेट के लिए।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. वर्तमान दस्तावेज़ फ़ील्ड मान के भीतर भू-स्थानिक $नियर

  2. स्प्रिंग रिपोजिटरी ऑटो विभिन्न वर्ग प्रकारों वाली संस्थाओं को कास्ट करता है

  3. MongoDB $min एकत्रीकरण पाइपलाइन ऑपरेटर

  4. मैं Mongo में NOT IN क्वेरी कैसे करूँ?

  5. MongoDB बनाम कैसेंड्रा