MongoDB में रैंकिंग/सर्च काउंट लागू करना
इसके लिए MongoDB में aggregate() का उपयोग करें। पहले एक कलेक्शन बनाते हैं:
> db.demo120.insertOne(
{
'Name': 'Chris',
'Subjects': ['MySQL', 'MongoDB', 'Java', 'Python']
}
);
{ "acknowledged": true, "insertedId": ObjectId("5e2f11aed8f64a552dae6365") }
> db.demo120.insertOne(
{
'Name': 'Bob',
'Subjects': ['C', 'MongoDB']
}
);
{ "acknowledged": true, "insertedId": ObjectId("5e2f11afd8f64a552dae6366") }
सभी डॉक्यूमेंट्स देखना
> db.demo120.find();
आउटपुट:
{ "_id": ObjectId("5e2f11aed8f64a552dae6365"), "Name": "Chris", "Subjects": ["MySQL", "MongoDB", "Java", "Python"] }
{ "_id": ObjectId("5e2f11afd8f64a552dae6366"), "Name": "Bob", "Subjects": ["C", "MongoDB"] }
रैंकिंग/सर्च काउंट क्वेरी
> var s = ['MySQL', 'Java', 'MongoDB'];
> db.demo120.aggregate([
{ "$match": { "Subjects": { "$in": s } } },
{
"$addFields": {
"RankSearch": {
"$divide": [
{ "$size": { "$setIntersection": ["$Subjects", s] } },
{ "$size": "$Subjects" }
]
}
}
},
{ "$sort": { "RankSearch": -1 } }
])
परिणाम
{ "_id": ObjectId("5e2f11aed8f64a552dae6365"), "Name": "Chris", "Subjects": ["MySQL", "MongoDB", "Java", "Python"], "RankSearch": 0.75 }
{ "_id": ObjectId("5e2f11afd8f64a552dae6366"), "Name": "Bob", "Subjects": ["C", "MongoDB"], "RankSearch": 0.5 }
व्याख्या
- $match: केवल उन्हीं डॉक्यूमेंट्स को चुनता है जिनके Subjects ऐरे में कम से कम एक मान s ऐरे से मेल खाता है
- $setIntersection: दोनों ऐरे के सामान्य तत्व ढूंढता है
- $size: ऐरे की लंबाई लौटाता है
- $divide: सामान्य तत्वों की संख्या को कुल विषयों की संख्या से विभाजित करता है
- $sort: RankSearch के अवरोही क्रम में सॉर्ट करता है
Chris का स्कोर 0.75 है क्योंकि उसके 4 में से 3 विषय मेल खाते हैं, जबकि Bob का 0.5 है क्योंकि उसके 2 में से 1 विषय मेल खाता है।