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

$where . में db.system.js फ़ंक्शन को कॉल करना

क्या आप अपने PHP कोड में उसी डेटाबेस नेमस्पेस से कनेक्ट कर रहे हैं जिसे आपने शेल का उपयोग करने से जोड़ा है? मुझे नहीं लगता!

वैसे भी आप $where की अवधारणा को गलत समझते हैं इस संदर्भ में, चूंकि आप केवल मूल्यांकन कर सकते हैं और नहीं वापसी संग्रह में पहले से मौजूद डेटा के अलावा संशोधित परिणाम।

केवल वही चीज़ें जो वास्तव में मौजूदा दस्तावेज़ों से कुछ अलग लौटा सकती हैं, वे हैं .mapReduce() और .aggregate()

तो प्रदर्शित करने के लिए, "समान नामस्थान" में यदि आप एक संग्रह को परिभाषित करते हैं:

db.djunk.insert({ "x": 1, "y": 2 })

और फिर एक .mapReduce() चलाएं

db.dbjunk.mapReduce(
    function() {
        emit(this._id, sum(this.x,this.y))
    },
    function() {}, // does nothing here where already unique
    { "out": { "inline": 1 } }
)

वह वापस होगा एक वास्तविक सारांशित परिणाम:

{
    "_id" : ObjectId("571a9bb951d042a7a896fd92"),
    "value" : 3
}

वह सब $where कर सकते हैं, "तार्किक रूप से" दस्तावेज़ का चयन करें:

db.djunk.find(function() {
    return sum(this.x,this.y) > 3
})

जो शर्त को पूरा नहीं करेगा।

लेकिन निश्चित रूप से आपको वास्तव में ऐसा करने की ज़रूरत नहीं है, और आम तौर पर जहां संभव हो वहां जावास्क्रिप्ट के किसी भी सर्वर निष्पादन से बचना चाहिए। यह देशी ऑपरेटरों की तुलना में बहुत धीमा है, और आप देशी ऑपरेटरों के साथ काफी कुछ कर सकते हैं।

तो इसके बजाय .mapReduce() कॉल .aggregate() :

db.djunk.aggregate([
    { "$project": {
        "total": { "$add": [ "$x", "$y" ] }
    }}
])

और जावास्क्रिप्ट मूल्यांकन के बजाय, .aggregate() . पर कॉल करें फिर से, $redact के साथ "तार्किक" फ़िल्टरिंग के लिए:

db.djunk.aggregate([
    { "$redact": {
        "$cond": {
            "if": { "$gt": [ { "$add": [ "$x", "$y" ] }, 3 ] },
            "then": "$$KEEP",
            "else": "$$PRUNE"
        }      
    }}
])

इसलिए ज्यादातर मामलों में जावास्क्रिप्ट मूल्यांकन का उपयोग करने के लिए हमेशा एक बेहतर विकल्प होता है। और निश्चित रूप से ऐसे मामलों में वास्तव में बहुत कम मामलों में सर्वर संग्रहीत कार्यों की आवश्यकता होती है जहां वास्तव में जावास्क्रिप्ट मूल्यांकन की आवश्यकता होती है।

लेकिन यहां आपकी मूल त्रुटि होगी क्योंकि फ़ंक्शन एक अलग नामस्थान में था, या वास्तव में आपने सर्वर को बीच में पुनरारंभ किया था। लेकिन समग्र बिंदु यह है कि आपको शायद वैसे भी संग्रहीत कार्यों का उपयोग नहीं करना चाहिए।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. मोंगो में शार्किंग और प्रतिकृति के बीच अंतर क्या है?

  2. MongoDB में रोलबैक को कैसे रोकें

  3. mongodb:क्या मुझे हमेशा अपडेट पर 'सुरक्षित' विकल्प का उपयोग करना चाहिए?

  4. जावा प्ले 2.0 के साथ मोंगोडब डेटाबेस

  5. नेवला - वस्तु गुणों तक नहीं पहुँच सकता?