mongo找到每场比赛的限制

时间:2016-01-15 12:39:18

标签: mongodb mongodb-query nosql

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

{
  title: String,
  category: String
}

我想编写一个选择各种类别的查询,类似于:

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

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

1 个答案:

答案 0 :(得分:2)

你可以使用mongodb aggregation来做到这一点。看看这个管道:

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

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