猫鼬排序,限制然后区分

时间:2020-04-05 07:24:55

标签: mongodb mongoose aggregation-framework

我有一个猫鼬模型Model, 这里有3个字段。 datamain_idsub_id

所以如果我做Model.find()

我得到类似下面的内容

[
 {data: 5, main_id: A, sub_id: X, created: 5/4/2020}, 
 {data: 6, main_id: A, sub_id: Y, created: 5/4/2020}, 
 {data: 7, main_id: B: sub_id: M, created: 4/4/2020}, 
 {data:11, main_id: A, sub_id: X, created: 3/4/2020}, 
 {data:12, main_id: A, sub_id: Y, created: 4/4/2020}, 
 {data:13, main_id: A, sub_id: X, created: 4/4/2020}
]

我想获取所有data唯一的main_id: A字段,该字段按createdlimit1排序,每个sub_idmain_id

因此,在这种情况下,我想返回一个[5, 6]数组,因为这是data的最新main_id: A条目,以及sub_id: X和{{ 1}}分别位于Y下。

1 个答案:

答案 0 :(得分:1)

您可以使用$match$sort$group聚合阶段来实现这一目标。

Model.aggregate([
  {
    $match: {
      "main_id": "A"
    }
  },
  {
    $sort: {
      "created": -1
    }
  },
  {
    $group: {
      "_id": {sub_id: "$sub_id"},
      data: {
        "$first": "$data"
      }
    }
  }
])

Playground

结果:

[
  {
    "_id": "Y",
    "data": 6
  },
  {
    "_id": "X",
    "data": 5
  }
]

请注意,.aggregate()方法始终返回对象,因此在快速应用程序中,您可以执行简单的映射即可将其转换为[5, 6]