定义
返回一组文档中第一个文档的表达式结果。仅当文档按定义的顺序排列时才有意义。
$first累加器可在以下阶段使用:
注意
消歧
本页描述了用作累加器时的 $first。累加器返回单个聚合值,例如一群组输入文档的总和、最大值或最小值。
您还可以在其他上下文中使用 $first:
$first (expression),返回大量的第一个元素。$first (window function),在$setWindowFields阶段用于返回窗口中第一个文档的值。
语法
{ $first: <expression> }
行为
定义文档顺序
要在分组阶段为 $first 定义文档顺序,请在前面添加 $sort 阶段。
缺失的值
群组中的文档可能缺少字段。 $first 按如下方式处理缺失值:
如果前一个管道阶段没有文档,则
$group阶段将不返回任何内容。如果
$first累加器正在处理的字段缺失,则$first返回null。
示例,考虑 badData集合中的以下文档,其中某些文档缺少字段:
db.badData.insertMany( [ { "_id": 1, "price": 6, "quantity": 6 }, { "_id": 2, "item": "album", "price": 5, "quantity": 5 }, { "_id": 7, "item": "tape", "price": 6, "quantity": 6 }, { "_id": 8, "price": 5, "quantity": 5 }, { "_id": 9, "item": "album", "price": 3, "quantity": '' }, { "_id": 10, "item": "tape", "price": 3, "quantity": 4 }, { "_id": 12, "item": "cd", "price": 7 } ] )
查询 badData 集合,在 item 字段对输出进行分组:
db.badData.aggregate( [ { $sort: { item: 1, price: 1 } }, { $group: { _id: "$item", inStock: { $first: "$quantity" } } } ] )
$first 从每个输出群组中选择第一个文档。缺少 item字段的文档与 _id字段的 null 值分组在一起。当累加器字段缺失时(本示例中为 quantity),$first 将返回 null。
示例
本页上的示例使用 sample_mflix 数据集中的数据。有关如何将此数据集加载到自管理MongoDB 部署中的详细信息,请参阅加载样本数据集。如果对示例数据库进行了任何修改,则可能需要删除并重新创建数据库才能运行本页上的示例。
以下示例按年份和标题对电影进行排序,然后按类型进行分组,以查找每种类型中最早发行的电影:
db.movies.aggregate( [ { $sort: { year: 1, title: 1 } }, { $unwind: "$genres" }, { $group: { _id: "$genres", firstMovieTitle: { $first: "$title" }, firstMovieYear: { $first: "$year" } } }, { $sort: { _id: 1 } }, { $limit: 5 } ] )
在前面的管道中: