सबसे पहले, ध्यान रखें कि $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({})
. के समकक्ष छोड़ देगा जो संग्रह के सभी दस्तावेज़ लौटा देगा।