MongoDB में Map-Reduce से ऐरे एलिमेंट का इंडेक्स खोजना
MongoDB में ऐरे के अंदर किसी वैल्यू का पोजीशन (इंडेक्स) खोजने के लिए Map-Reduce फंक्शन का उपयोग कर सकते हैं जिसमें JavaScript का indexOf() मेथड उपयोग होता है।
उदाहरण: डॉक्यूमेंट देखना
> db.retrievePositionDemo.find();
{ "_id" : ObjectId("5cd569ec7924bb85b3f4893f"), "Subjects" : [ "MySQL", "MongoDB", "Java" ] }
डॉक्यूमेंट प्रिटी प्रिंट
> db.retrievePositionDemo.find().pretty();
आउटपुट:
{ "_id" : ObjectId("5cd569ec7924bb85b3f4893f"), "Subjects" : [ "MySQL", "MongoDB", "Java" ] }
"MongoDB" का इंडेक्स खोजना (Map-Reduce)
> db.retrievePositionDemo.mapReduce(
... function() {
... emit(this._id, { "IndexValue": this.Subjects.indexOf("MongoDB") });
... },
... function() {},
... {
... "out": { "inline": 1 },
... "query": { "Subjects": "MongoDB" }
... }
... );
आउटपुट:
{ "results" : [ { "_id" : ObjectId("5cd569ec7924bb85b3f4893f"), "value" : { "IndexValue" : 1 } } ], "timeMillis" : 662, "counts" : { "input" : 1, "emit" : 1, "reduce" : 0, "output" : 1 }, "ok" : 1 }
"Java" का इंडेक्स खोजना
> db.retrievePositionDemo.mapReduce(
... function() {
... emit(this._id, { "IndexValue": this.Subjects.indexOf("Java") });
... },
... function() {},
... {
... "out": { "inline": 1 },
... "query": { "Subjects": "MongoDB" }
... }
... );
आउटपुट:
{ "results" : [ { "_id" : ObjectId("5cd569ec7924bb85b3f4893f"), "value" : { "IndexValue" : 2 } } ], "timeMillis" : 30, "counts" : { "input" : 1, "emit" : 1, "reduce" : 0, "output" : 1 }, "ok" : 1 }
परिणाम: "MongoDB" इंडेक्स 1 पर है, "Java" इंडेक्स 2 पर (0-बेस्ड इंडेक्सिंग)।
आधुनिक विकल्प (MongoDB 4.4+):
db.retrievePositionDemo.aggregate([
{ $project: {
index: { $indexOfArray: ["$Subjects", "MongoDB"] }
}}
]);
यह बहुत सरल और तेज है। Map-Reduce केवल पुराने वर्जन्स के लिए उपयोगी है।