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. ソートされたページングの特定のレコードのスキップ値を計算します

    2. MongoDBの動的属性を更新する方法は?

    3. 流星生産サーバーでmongodbを復元する

    4. 静的ファイルプロバイダーとしてのMongoDB?