如何用单条查询获取员工集合的首条与末条记录?
可以用单条查询语句获取第一条和最后一条员工记录
假设你使用的是MongoDB,以下是两种可行的单条查询方案:
方案一:用$facet拆分多管道查询
$facet能在一次聚合操作里同时执行多个独立的子管道,分别拿到第一条和最后一条数据:
db.employees.aggregate([ { $facet: { firstRecord: [ { $limit: 1 } ], lastRecord: [ { $sort: { EmpId: -1 } }, { $limit: 1 } ] } } ])
这里通过EmpId倒序来定位最后一条记录,因为你的数据里EmpId是递增的。如果要依赖文档插入顺序,也可以用MongoDB默认生成的_id字段排序(_id包含时间戳信息)。
方案二:结合$group聚合获取
如果不想用$facet,也可以通过$group来聚合出首尾两条记录:
db.employees.aggregate([ { $group: { _id: null, firstRecord: { $first: "$$ROOT" }, lastRecord: { $last: "$$ROOT" } } }, { $project: { _id: 0, firstRecord: 1, lastRecord: 1 } } ])
注意:这个方法依赖集合的自然顺序(也就是文档插入的先后顺序)。如果集合有过更新、删除操作,自然顺序可能和预期不符,这时候建议先排序再聚合:
db.employees.aggregate([ { $sort: { EmpId: 1 } }, { $group: { _id: null, firstRecord: { $first: "$$ROOT" }, lastRecord: { $last: "$$ROOT" } } }, { $project: { _id: 0 } } ])
内容的提问来源于stack exchange,提问作者Anandhu MS
相关产品推荐
相关产品推荐

