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

Mongodb $ जहां नोडज के साथ क्वेरी हमेशा सच होती है

सबसे पहले, ध्यान रखें कि $where यहां बताए गए कारणों के लिए ऑपरेटर का लगभग कभी भी उपयोग नहीं किया जाना चाहिए (क्रेडिट @WiredPrairie को जाता है)।

अपने मुद्दे पर वापस, आप जिस दृष्टिकोण को लेना चाहते हैं वह मोंगोडब खोल में भी काम नहीं करेगा (जो स्पष्ट रूप से नग्न जेएस कार्यों को $where के साथ अनुमति देता है ऑपरेटर)। $where . को प्रदान किया गया जावास्क्रिप्ट कोड ऑपरेटर को मोंगो सर्वर पर निष्पादित किया जाता है और उसके पास संलग्न वातावरण ("संदर्भ बाइंडिंग") तक पहुंच नहीं होगी।

> db.test.insert({a: 42})
> db.test.find({a: 42})
{ "_id" : ObjectId("5150433c73f604984a7dff91"), "a" : 42 }
> db.test.find({$where: function() { return this.a == 42 }}) // works
{ "_id" : ObjectId("5150433c73f604984a7dff91"), "a" : 42 }
> var local_var = 42
> db.test.find({$where: function() { return this.a == local_var }})
error: {
    "$err" : "error on invocation of $where function:\nJS Error: ReferenceError: local_var is not defined nofile_b:1",
    "code" : 10071
}

इसके अलावा ऐसा लगता है कि नोड.जेएस नेटिव मोंगो ड्राइवर शेल से अलग व्यवहार करता है जिसमें यह आपके द्वारा क्वेरी ऑब्जेक्ट में प्रदान किए गए जेएस फ़ंक्शन को स्वचालित रूप से क्रमबद्ध नहीं करता है और इसके बजाय यह क्लॉज को पूरी तरह से छोड़ देता है। यह आपको timetables.find({}) . के समकक्ष छोड़ देगा जो संग्रह के सभी दस्तावेज़ लौटा देगा।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB में धीमी क्वेरी का विश्लेषण

  2. MongoDB बिना समय के केवल तारीखों की तुलना करता है

  3. मोंगोडब को सहेजने का प्रयास करते समय प्रमाणीकरण विफलता

  4. MongoDB के लिए क्वेरी आईडीई?

  5. मोंगोडीबी बीएसओएन कोडेक ऑब्जेक्ट एन्कोडिंग करते समय उपयोग नहीं किया जा रहा है