मुझे लगता है कि आपका तरीका अच्छा है लेकिन बस results.length
. बदलें से user.length
. तक लेकिन अगर आप mongoDB ऑपरेशन का उपयोग करना चाहते हैं तो ऐसा करें:
db.collection.aggregate([
{
"$sort": {
"score": -1
}
},
{
"$group": {
"_id": "",
"items": {
"$push": "$$ROOT"
}
}
},
{
"$unwind": {
"path": "$items",
"includeArrayIndex": "items.rank"
}
},
{
"$replaceRoot": {
"newRoot": "$items"
}
},
{
"$sort": {
"score": -1
}
}
])
आप lean()
का उपयोग कर सकते हैं और select
find
. में कुछ फ़ील्ड प्रदर्शन बढ़ाने के लिए क्वेरी
async findRank() {
const users = await User.find({},"_id score").sort({score: -1}).lean()
for (let index = 0; index < users.length; index++) {
users[index].rank = index
}
return users
}
if you want group by the documents based on name or score ... it's better use mongodb operation