mongo 查找每场比赛的限制

mongo find limit each match

我有一个 mongo 集合,看起来像这样:

{
  title: String,
  category: String
}

我想写一个select各种类别的查询,类似这样:

Collection.find({category: {$in: ['Books', 'Cars', 'People']});

但我只想 select 每个类别的数量有限,例如每本书、汽车、人 5 个。我该如何编写这样的查询?我可以做一个查询还是必须使用多个查询?

您可以使用 mongodb aggregation 来完成。看看这个管道:

  1. 按类别过滤所有文档(使用 $match)。
  2. 按类别对数据进行分组并为具有相同类别的项目创建数组(使用 $group and $push)。
  3. 获取最大长度有限的每个数组的子集(使用$project and $slice)。

尝试以下查询:

db.collection.aggregate([
  {$match: {category: {$in: ['Books', 'Cars', 'People']}}}, 
  {$group: {_id: "$category", titles: {$push: "$title"}}}, 
  {$project: {titles: {$slice: ["$titles", 5]}}}
])