定义
返回一组文档中第一个文档的表达式结果。仅当文档按定义的顺序排列时才有意义。
$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 } ] )
在前面的管道中: