MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Сортирайте масив и добавете поле за ранг в MongoDB

Мисля, че вашият метод е добър, но просто променете 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



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $trunc

  2. Добавете данни в документи в Mongo DB с помощта на PHP

  3. Вложена заявка на Mongoose в модел по поле на неговия рефериран модел

  4. Защо различните планове за заявки на MongoDB показват различна nReturned стойност?

  5. MongoDB Aggregation изглежда много бавно