当前位置: 首页 > 知识库问答 >
问题:

在mongodb中对推送数组排序

邢浩邈
2023-03-14

我有一个像这样的mongoDB结果。

[
  {
    "_id": {
      "_id": "57174838afb8eb97ccd409ca",
      "name": "Yet another position",
      "description": "description",
      "code": "11Y-WK"
    },
    "votes": [
      {
        "candidate": {
          "_id": "56f19694e84a6bf1b66ad378",
          "surname": "EBIMOBOERE",
          "firstName": "BLESSING",
          "middleName": "OGIONWO",
          "othername": " BAZIGHA OGIONWO",
          "sc_number": "071050"
        },
        "count": 3
      },
      {
        "candidate": {
          "_id": "56f19690e84a6bf1b66aa558",
          "surname": "OIWO",
          "othername": "PETER ODION",
          "sc_number": "034837"
        },
        "count": 2
      },
      {
        "candidate": {
          "_id": "56f19690e84a6bf1b66aa2f3",
          "surname": "FASHOLA",
          "othername": "OLUFUNKE JUMOKE",
          "sc_number": "008243"
        },
        "count": 4
      }
    ],
    "total_count": 9
  },
  {
    "_id": {
      "_id": "571747a8afb8eb97ccd409c7",
      "name": "Test Position",
      "description": "Description",
      "code": "10T-9K"
    },
    "votes": [
      {
        "candidate": {
          "_id": "56f19690e84a6bf1b66aa3b7",
          "surname": "ASAKA",
          "othername": "ISAAC",
          "sc_number": "044660"
        },
        "count": 1
      },
      {
        "candidate": {
          "_id": "56f19690e84a6bf1b66aa6ea",
          "surname": "ADEYEMI",
          "othername": "OLUWAFUNMILZYO",
          "sc_number": "062444"
        },
        "count": 5
      },
      {
        "candidate": {
          "_id": "56f1968fe84a6bf1b66aa03e",
          "surname": "OGWOR",
          "othername": "JAMES",
          "sc_number": "042357"
        },
        "count": 3
      }
    ],
    "total_count": 9
  }
]

我需要排序计数降序。

下面是返回上述结果的查询。我在各个阶段都尝试过使用sort,但没有成功。

  Vote.aggregate([
{ "$match": { "_poll" : mongoose.mongo.ObjectID(req.query._poll) } },
{
  "$group": {
    "_id": {
      "_position": '$_position',
      "candidate": '$candidate'
    },
    "voteCount": { "$sum": 1 }
  }
},
{
  "$group": {
    "_id": "$_id._position",
    "votes": {
      "$push": {
        "candidate": "$_id.candidate",
        "count": "$voteCount"
      }
    },
    "total_count": { "$sum": "$voteCount" }
  }
},
{ "$sort": { "total_count": -1 } }

需要插入排序操作的地方,按计数降序排序。

共有1个答案

丌官星渊
2023-03-14

在聚合期间对数组进行排序是一件有点棘手的事情。所以我要解决的是:

  1. 展开阵列

请找到mongo shell代码,它应该会给出这个技术的概述:

var group = {$group:{_id:"$type", votes:{$push:"$value" }}}
var unwind={$unwind:"$votes"}
var sort = {$sort:{"votes":-1}}
var reGroup = {$group:{_id:"$_id", votes:{$push:"$votes" }}}
db.readings.aggregate([group,unwind,sort ,reGroup])

欢迎评论!

 类似资料:
  • 本文向大家介绍如何在MongoDB中推送数组?,包括了如何在MongoDB中推送数组?的使用技巧和注意事项,需要的朋友参考一下 要推送数组,请在MongoDB中使用$push。首先让我们创建一个包含文档的集合- 在方法的帮助下显示集合中的所有文档- 这将产生以下输出- 以下是推送数组的查询- 这将产生以下输出-

  • 也许有人知道。。我的mongoDB集合中的每个文档如下所示: 如何找到每个组中强度. a和强度. b之和最大的前10个文档? 示例:我有这样的文件: 我想得到结果: 总之,在本例中,我希望得到按“group”字段分组的结果,并仅从每组中选择前两个字段总数最大的“a”和“b”文档。这是否可行? 到目前为止,我做到了: 但如何排序和限制每个组的数组“用户”中的元素数?

  • 我需要后端的帮助。我正在使用邮递员,这是我后端的模型: 我试图在代理数组中推送文档,但我遇到了一些错误。 路线和控制器如下: 这就是我得到的错误:(节点:9916)未经处理的PromisejectionWarning:CastError:CastToObjectId值“{departmentId:'60e27549c36af1272812c4e3'}”(类型对象)在模型“Department”的路

  • 本文向大家介绍在Perl中对数组排序,包括了在Perl中对数组排序的使用技巧和注意事项,需要的朋友参考一下 Perl中的sort()函数根据ASCII数值标准对数组的每个元素进行排序。此函数具有以下语法- 语法 该函数对LIST排序并返回排序后的数组值。如果指定了SUBROUTINE,则在排序元素时将应用SUBROUTINE内部的指定逻辑。 示例 输出结果 这将产生以下结果- 请注意,排序是根据单

  • 问题内容: 我有一个示例数组,用于将条目插入到YUI数据表中 我可以通过这样做获得相同的阵列吗? 我在这里尝试的是编写一个通用方法,该方法将遍历结果列表并在将来能够形成一个条目。 所以我怎样才能使数组与本书代码的第一部分相同? 添加了我的整个示例代码,带注释的书本数组似乎可以工作,但未注释的部分似乎无法显示行 问题答案: 我尝试并找到了解决方案,因为在我按入后,att和值将成为对象 这将使其显示在

  • 我在一个名为course的模式中有一个名为students的数我创建了一个路由,允许我使用学生的将学生添加到这个数组中,如下所示: 当我尝试用以下JSON体向我的endpoint发出PUT请求时: 谢谢!