mongo 查找每场比赛的限制
mongo find limit each match
我有一个 mongo 集合,看起来像这样:
{
title: String,
category: String
}
我想写一个select各种类别的查询,类似这样:
Collection.find({category: {$in: ['Books', 'Cars', 'People']});
但我只想 select 每个类别的数量有限,例如每本书、汽车、人 5 个。我该如何编写这样的查询?我可以做一个查询还是必须使用多个查询?
您可以使用 mongodb aggregation 来完成。看看这个管道:
- 按类别过滤所有文档(使用 $match)。
- 按类别对数据进行分组并为具有相同类别的项目创建数组(使用 $group and $push)。
- 获取最大长度有限的每个数组的子集(使用$project and $slice)。
尝试以下查询:
db.collection.aggregate([
{$match: {category: {$in: ['Books', 'Cars', 'People']}}},
{$group: {_id: "$category", titles: {$push: "$title"}}},
{$project: {titles: {$slice: ["$titles", 5]}}}
])
我有一个 mongo 集合,看起来像这样:
{
title: String,
category: String
}
我想写一个select各种类别的查询,类似这样:
Collection.find({category: {$in: ['Books', 'Cars', 'People']});
但我只想 select 每个类别的数量有限,例如每本书、汽车、人 5 个。我该如何编写这样的查询?我可以做一个查询还是必须使用多个查询?
您可以使用 mongodb aggregation 来完成。看看这个管道:
- 按类别过滤所有文档(使用 $match)。
- 按类别对数据进行分组并为具有相同类别的项目创建数组(使用 $group and $push)。
- 获取最大长度有限的每个数组的子集(使用$project and $slice)。
尝试以下查询:
db.collection.aggregate([
{$match: {category: {$in: ['Books', 'Cars', 'People']}}},
{$group: {_id: "$category", titles: {$push: "$title"}}},
{$project: {titles: {$slice: ["$titles", 5]}}}
])