簡體   English   中英

在嵌套對象數組 mongoose 中排序

[英]sort in nested object array mongoose

{
  "_id": "5f8e51e188e8bc24ff8b85e4",
  "name": "stars",
  "players": [
    {
      "_id": "5f961d850965854110fce6a5",
      "name": "juliannn",
      "points": 0
    },
    {
      "_id": "5f961dec0965854110fce6a6",
      "name": "Julian",
      "points": 0
    },
    {
      "_id": "5f961df70965854110fce6a7",
      "name": "Matias",
      "points": 0
    },
    {
      "_id": "5f961e070965854110fce6a8",
      "name": "Mariano",
      "points": 11
    }
  ],
  "description": "Pick 1 or more numbers that sum to the number of stars",
  "__v": 0
}

我有這個函數返回的數據集合

const game = await Game.findOne({ name: id })

現在我想按分數 DESC 對球員進行排序,我所做的是

const game = await Game.findOne({ name: id }).sort({'players.points': 1})

我從這里得到的

我期待的是這個

{
  "_id": "5f8e51e188e8bc24ff8b85e4",
  "name": "stars",
  "players": [
    {
      "_id": "5f961e070965854110fce6a8",
      "name": "Mariano",
      "points": 11
    },
    {
      "_id": "5f961d850965854110fce6a5",
      "name": "juliannn",
      "points": 0
    },
    {
      "_id": "5f961dec0965854110fce6a6",
      "name": "Julian",
      "points": 0
    },
    {
      "_id": "5f961df70965854110fce6a7",
      "name": "Matias",
      "points": 0
    }
  ],
  "description": "Pick 1 or more numbers that sum to the number of stars",
  "__v": 0
}

我錯過了什么嗎?

您需要使用聚合來操作數組。

db.collection.aggregate([
  {
    $match: {
      _id: "5f8e51e188e8bc24ff8b85e4"
    }
  },
  {
    $unwind: "$players"
  },
  {
    $sort: {
      "players.points": -1
    }
  },
  {
    $group: {
      _id: "$_id",
      name: {
        $first: "$name"
      },
      players: {
        $push: "$players"
      }
    }
  }
])

工作Mongo 游樂場

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM