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

कथन द्वारा सशर्त समूह के साथ MongoDB क्वेरी

आपका कोड काम नहीं करता, क्योंकि $cond संचायक ऑपरेटर नहीं है। केवल ये संचायक संचालकों का उपयोग $group . में किया जा सकता है मंच।

मान लें कि आपके रिकॉर्ड में source . के दो से अधिक संभावित मान नहीं हैं जैसा कि आपने अपने प्रश्न में उल्लेख किया है, आप एक सशर्त जोड़ सकते हैं $project $group . को चरणबद्ध और संशोधित करें मंच के रूप में,

कोड:

    db.customer.aggregate([
        {
            $group: {
                "_id": {
                    "id": "$id",
                    "firstName": "$firstName",
                    "lastName": "$lastName",
                    "code": "$code"
                },
                "sourceA": { $first: "$source" },
                "sourceB": { $last: "$source" }
            }
        },
        {
            $project: {
                "source": {
                    $cond: [
                        { $eq: ["$sourceA", "email"] },
                        "$sourceB",
                        "$sourceA"
                    ]
                }
            }
        }
    ])

यदि स्रोत के लिए दो से अधिक संभावित मान हो सकते हैं, तो आप निम्न कार्य कर सकते हैं:

  • Group id . द्वारा , firstName , lastName और code . source . के अद्वितीय मान संचित करें , $addToSet का उपयोग करके ऑपरेटर।
  • $redact का इस्तेमाल करें email . के अलावा केवल अन्य मान रखने के लिए ।
  • Project आवश्यक फ़ील्ड, यदि source सरणी खाली है (सभी तत्वों को हटा दिया गया है), avalue जोड़ें email इसके लिए।
  • Unwind स्रोत फ़ील्ड को एक फ़ील्ड के रूप में सूचीबद्ध करने के लिए और एक सरणी के रूप में नहीं। (वैकल्पिक)

कोड:

    db.customer.aggregate([
        {
            $group: {
                "_id": {
                    "id": "$id",
                    "firstName": "$firstName",
                    "lastName": "$lastName",
                    "code": "$code"
                },
                "sourceArr": { $addToSet: { "source": "$source" } }
            }
        },
        {
            $redact: {
                $cond: [
                    { $eq: [{ $ifNull: ["$source", "other"] }, "email"] },
                    "$$PRUNE",
                    "$$DESCEND"
                ]
            }
        },
        {
            $project: {
                "source": {
                    $map: {
                        "input":
                        {
                            $cond: [
                                { $eq: [{ $size: "$sourceArr" }, 0] },
                                [{ "source": "item" }],
                                "$sourceArr"]
                        },
                        "as": "inp",
                        "in": "$$inp.source"
                    }
                }
            }
        }
    ])



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB टेक्स्ट इंडेक्स और टेक्स्ट स्कोर में दस्तावेज़ की लंबाई को कैसे संभालता है?

  2. स्थानीय नेटवर्क के अंदर एक और मशीन मोंगोडब डेटाबेस कैसे कनेक्ट करें?

  3. MongoDB पूर्ण पाठ खोज - मिलान करने वाले शब्द और सटीक वाक्यांश

  4. बीएसओएन टाइमस्टैम्प को मोंगो चेंजस्ट्रीम से डेट में कैसे बदलें?

  5. मोंगो संग्रह को ओवरराइड किए बिना मौजूदा संग्रह में आयात करना