$where और JavaScript फ़िल्टर से ऐरे में डुप्लिकेट वैल्यू वाले डॉक्यूमेंट्स ढूंढें
MongoDB में किसी ऐरे फ़ील्ड में एक ही वैल्यू एक से अधिक बार आने वाले डॉक्यूमेंट्स ढूंढने के लिए $where क्लॉज में JavaScript फ़ंक्शन का उपयोग करें।
उदाहरण: संग्रह बनाना
> db.demo188.insertOne({
"ListOfData": [{"Data": 100}, {"Data": 200}, {"Data": 100}]
});
{ "acknowledged": true, "insertedId": ObjectId("5e3ad1c203d395bdc21346bd") }
> db.demo188.insertOne({
"ListOfData": [{"Data": 100}, {"Data": 200}, {"Data": 300}]
});
{ "acknowledged": true, "insertedId": ObjectId("5e3ad1c203d395bdc21346be") }
सभी डॉक्यूमेंट्स देखना
> db.demo188.find();
{ "_id": ObjectId("5e3ad1c203d395bdc21346bd"), "ListOfData": [{"Data": 100}, {"Data": 200}, {"Data": 100}] }
{ "_id": ObjectId("5e3ad1c203d395bdc21346be"), "ListOfData": [{"Data": 100}, {"Data": 200}, {"Data": 300}] }
ऐरे में डुप्लिकेट वैल्यू (100) ढूंढने की क्वेरी
> db.demo188.find({
"$where": function() {
return this.ListOfData.filter(function(d) {
return d.Data == 100;
}).length > 1;
}
})
आउटपुट:
{ "_id": ObjectId("5e3ad1c203d395bdc21346bd"), "ListOfData": [{"Data": 100}, {"Data": 200}, {"Data": 100}] }
पहले डॉक्यूमेंट में 100 दो बार है, इसलिए वह मेल खाता है। दूसरे में 100 केवल एक बार है, इसलिए बाहर हो गया।
चेतावनी:
$whereधीमा है और इंडेक्स उपयोग नहीं करता। बड़े संग्रहों के लिए एग्रीगेशन में$unwind,$group,$matchका उपयोग करें।