MongoDB 按多个字段聚合排序

问题描述 投票:0回答:2

这是我的数据:

{
   "name": "some name",
   "blockNumber": 10,
   "uniqueId: 2
},
{
   "name": "some name",
   "blockNumber": 9,
   "uniqueId: 3
},
{
   "name": "some name",
   "blockNumber": 10,
   "uniqueId: 1
},

这是我的询问:

myModel.aggregate([
        {
          $match: someFilter,
        },
        {
          $sort: { blockNumber: -1 },
        },
])

就有了预期的结果:

{
   "name": "some name",
   "blockNumber": 10,
   "uniqueId: 1
},
{
   "name": "some name",
   "blockNumber": 10,
   "uniqueId: 2
},
{
   "name": "some name",
   "blockNumber": 9,
   "uniqueId: 3
}

我正在寻找一种方法,仅当多个文档的 blockNum 相同时,才根据第二个值(在本例中为 uniqueId)对数据进行额外排序,以便最终结果也按降序 uniqueId 排序。示例:

{
   "name": "some name",
   "blockNumber": 10,
   "uniqueId: 2
},
{
   "name": "some name",
   "blockNumber": 10,
   "uniqueId: 1
},
{
   "name": "some name",
   "blockNumber": 9,
   "uniqueId: 3
}
    
mongodb aggregation-framework
2个回答
1
投票

我实际上想通了:只需在排序阶段添加第二个字段即可。 查询是:

myModel.aggregate([
        {
          $match: someFilter,
        },
        {
          $sort: { blockNumber: -1, uniqueId: -1 },
        },
])

结果:

{
   "name": "some name",
   "blockNumber": 10,
   "uniqueId: 2
},
{
   "name": "some name",
   "blockNumber": 10,
   "uniqueId: 1
},
{
   "name": "some name",
   "blockNumber": 9,
   "uniqueId: 3
}

0
投票

.sort({ $natural: 1 })

我实际上想通了:只需在排序阶段添加第二个字段即可。查询是:

© www.soinside.com 2019 - 2024. All rights reserved.