MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Urutkan array dan tambahkan bidang peringkat di MongoDB

Saya pikir metode Anda bagus tetapi cukup ubah results.length ke user.length tetapi jika Anda ingin menggunakan operasi mongoDB lakukan seperti ini:

db.collection.aggregate([
  {
    "$sort": {
      "score": -1
    }
  },
  {
    "$group": {
      "_id": "",
      "items": {
        "$push": "$$ROOT"
      }
    }
  },
  {
    "$unwind": {
      "path": "$items",
      "includeArrayIndex": "items.rank"
    }
  },
  {
    "$replaceRoot": {
      "newRoot": "$items"
    }
  },
  {
    "$sort": {
      "score": -1
    }
  }
])

anda dapat menggunakan lean() dan select beberapa bidang di find kueri untuk meningkatkan kinerja

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



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB - berbeda dengan kueri tidak menggunakan indeks

  2. Cara mengatasi error :dbpath (/data/db/) tidak ada secara permanen di MongoDB

  3. Apa yang dimaksud dengan dokumentasi MongoDB ketika dikatakan bahwa ObjectID cenderung unik?

  4. Bagaimana cara langsung menanyakan bidang bersarang tanpa menentukan bidang induk?

  5. MongoDB $first Aggregation Pipeline Operator