【问题标题】:is there a method of sorting a mongoose model by the sum of 2 fields?有没有一种方法可以通过 2 个字段的总和对猫鼬模型进行排序?
【发布时间】:2021-04-05 22:52:22
【问题描述】:

我有那些模型

[{"trisWin":18,"trisLost":2,"pongWin":4,"_id":"6068c0c237326d13706569aa","username":"Tommaso","password":"$2a$10$2TiaY12yCcRKWleDkXCeGe1ujJf8Liv5WBzsxFjGesrZR.KtakQtW","__v":0},{"trisWin":13,"trisLost":0,"pongWin":10,"_id":"606b838a81811a3734a9c717","username":"Test1234","password":"$2a$10$0KoOhIRzjQlsMho0rmFsLeoorTn4bjL3eGofRQuy.cc//3zIttWsa","__v":0},{"trisWin":9,"trisLost":0,"pongWin":2,"_id":"6068ca2ad9587c2b2c8df467","username":"Giacomo","password":"$2a$10$h24RPkGssur29K1WM5aCuOVO6Uw7cY9DD.s9nOU1iEp4qb6TxSuvu","__v":0}]

我想按“pongWin”和“trisWin”之和对它们进行排序

我试过这个const result = await User.find().sort({ trisWin: -1 })

它有效,但仅适用于 trisWin 变量

【问题讨论】:

    标签: javascript node.js mongodb mongoose model


    【解决方案1】:

    您只需将字段添加到您传递给排序方法的对象。

    User.find().sort({ trisWin: -1, pongWin: -1 })
    

    【讨论】:

    • 但这将基于第一个 trisWin 排序,然后如果 trisWin 具有相同的值,则将基于 pongWin 排序。但它不会基于trisWin + pongWin
    • 我的错,我没有正确阅读您的问题。毗湿奴给出正确答案。
    【解决方案2】:

    您不能在不使用聚合的情况下对两个字段的总和进行排序。 但是,聚合很慢,并且不会持久化输出。

    您可以在每个文档上创建一个新字段trisTotal,然后根据该字段进行排序。 如果trisWintrisLoss``keep updating, you can also update the trisTotalin the same update query that you use for updatingtrisWinandtrisLoss```.

    User.update_many(filter={}, update= {$set: {trisTotal: { $trisWin + $trisLost}}})
    const result = await User.find().sort({ trisTotal: -1 })
    

    【讨论】:

      【解决方案3】:

      您可以为此使用聚合管道

      const result = await User.aggregate([
        {
          $addFields: { // new field to hold the total
            total: {
              $sum: ["$pongWin", "$trisWin"],
            },
          },
        },
        {
          $sort: {  // Sorting based on total
            total: -1,
          },
        },
        {
          $unset: ["total"], // Removing the newly added total field after sorting 
        },
      ]);
      
      

      【讨论】:

        猜你喜欢
        • 2023-03-08
        • 1970-01-01
        • 2018-11-10
        • 2011-07-29
        • 2016-05-03
        • 2014-12-12
        • 2013-03-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多