MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Sortuj tablicę i dodaj pole rangi w MongoDB

Myślę, że twoja metoda jest dobra, ale po prostu zmień results.length na user.length ale jeśli chcesz użyć operacji mongoDB, zrób tak:

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

możesz użyć lean() i select niektóre pola w find zapytanie zwiększające wydajność

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. Czy db.stats() jest wywołaniem blokującym dla MongoDB?

  2. MongoDB i Mongoose uzyskujące dostęp do jednej bazy danych podczas uwierzytelniania względem innej (NodeJS, Mongoose)

  3. Railsy 3 korzystające z MongoDB za pośrednictwem adaptera mongoid — czy istnieje sposób udostępniania specyfikacji atrybutów bez korzystania z dziedziczenia jednotabelowego?

  4. Jak zrobić sortowanie alfanumeryczne w mongoDB?

  5. Czy GridFS jest wystarczająco szybki i niezawodny do produkcji?