MongoDB में $where के साथ कलेक्शन और एम्बेडेड डॉक्यूमेंट फील्ड्स की समानता जांचना
इसके लिए MongoDB में $where का उपयोग करके जांचें।
कलेक्शन बनाना
> db.demo292.insertOne({FirstName:"Chris",LastName:"Brown", "Friend":{FirstName:"David","LastName":"Miller"} });
{ "acknowledged": true, "insertedId": ObjectId("5e4c10aa5d93261e4bc9ea30") }
> db.demo292.insertOne({FirstName:"John",LastName:"Doe", "Friend":{FirstName:"Mike","LastName":"Doe"} });
{ "acknowledged": true, "insertedId": ObjectId("5e4c10dc5d93261e4bc9ea31") }
सभी डॉक्यूमेंट्स
> db.demo292.find();
समानता जांच क्वेरी
> db.demo292.find({$where: 'this.Friend.LastName === this.LastName'})परिणाम
व्याख्या
- $where: जावास्क्रिप्ट अभिव्यक्ति का मूल्यांकन करता है
- this.Friend.LastName: एम्बेडेड डॉक्यूमेंट Friend का LastName फील्ड
- this.LastName: टॉप-लेवल डॉक्यूमेंट का LastName फील्ड
- ===: सख्त समानता तुलना
- पहला डॉक्यूमेंट: "Miller" !== "Brown" → false
- दूसरा डॉक्यूमेंट: "Doe" === "Doe" → true
सावधानी
- प्रदर्शन: $where जावास्क्रिप्ट इंजन का उपयोग करता है, धीमा है, इंडेक्स उपयोग नहीं करता
- सुरक्षा: अनट्रस्टेड इनपुट के साथ इंजेक्शन जोखिम
- विकल्प: MongoDB 3.6+ में $expr के साथ एग्रीगेशन का उपयोग करें:
$expr इंडेक्स का उपयोग कर सकता है और अधिक सुरक्षित/तेज है।