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

Mongodb में कुल क्वेरी विशिष्ट फ़ील्ड लौटाती है

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

विशेष रूप से यहां आप अपने दस्तावेज़ में "यू" फ़ील्ड का केवल "प्रोजेक्ट" करते हैं और इसलिए आपने अन्य डेटा को उपलब्ध होने से हटा दिया है। अब यहां मौजूद एकमात्र फ़ील्ड "नाम" है, जिसे आपने "अनुमानित" किया है।

शायद ऐसा कुछ करने का आपका इरादा वास्तव में था:

db.collectiontmp.aggregate([
    { "$group": {
        "_id": {
           "_id": "$u._id",
           "email": { "$toUpper": "$u.e" }
        },
        "total": { "$sum": 1 },
    }},
    { "$project": {
        "_id": 0,
        "email": "$_id.email",
        "total": 1
    }},
    { "$sort": { "total": -1 } },
    { "$limit": 10 }
])

या यहां तक ​​कि:

db.collectiontmp.aggregate([
    { "$group": {
        "_id": "$u._id",
        "email": { "$first": { "$toUpper": "$u.e" } }
        "total": { "$sum": 1 },
    }},
    { "$project": {
        "_id": 0,
        "email": 1,
        "total": 1
    }},
    { "$sort": { "total": -1 } },
    { "$limit": 10 }
])

इससे आपको वह आउटपुट मिलता है जिसकी आप तलाश कर रहे हैं।

याद रखें कि चूंकि यह एक "पाइपलाइन" है, तो पहले चरण से केवल "आउटपुट" ही "अगले" चरण के लिए उपलब्ध होता है। दस्तावेज़ की कोई "वैश्विक" अवधारणा नहीं है क्योंकि यह SQL में एक घोषणात्मक कथन नहीं है, बल्कि एक "पाइपलाइन" है।

तो सोचो यूनिक्स पाइप "|" आदेश दें, या अन्यथा देखें। तब आपकी सोच सही हो जाएगी।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB:थीसिस में स्कीमा आरेख का प्रतिनिधित्व कैसे करें?

  2. मोंगो अद्यतन सरणी तत्व (.NET ड्राइवर 2.0)

  3. कैसे प्रोजेक्ट करें कि क्या फ़ील्ड मौजूद है

  4. लोचदार बीनस्टॉक में मोंगो स्थापित/सेटअप

  5. mLab प्रमाणीकरण पर MongoDB विफल रहता है