MongoDB聚合查询添加$sort后birth_date字段不显示的问题求助
解决MongoDB聚合管道排序后birth_date字段不显示的问题
你遇到的问题是嵌套字段排序引发的潜在异常导致的,把crew对象提升为顶层文档即可解决,同时让管道逻辑更清晰。
修正后的聚合管道如下:
db.movie.aggregate([ {"$unwind": "$crew"}, {"$replaceRoot": { "newRoot": "$crew" }}, {"$match": {"death_date": {"$exists": false}}}, {"$project": {"give_name": 1, "birth_date": 1}}, {"$sort": {"birth_date": 1}} ])
关键修改说明:
- 用
$replaceRoot把unwind后的crew嵌套对象转为顶层文档,后续操作直接针对顶层字段,避开了嵌套路径访问的潜在问题 - 后续的
$match、$project、$sort都直接使用death_date、birth_date等顶层字段,无需再加crew.前缀
如果部分crew成员本身没有birth_date字段,你可以在$match阶段额外添加过滤条件,确保只返回有生日记录的在世成员:
db.movie.aggregate([ {"$unwind": "$crew"}, {"$replaceRoot": { "newRoot": "$crew" }}, {"$match": { "death_date": {"$exists": false}, "birth_date": {"$exists": true} }}, {"$project": {"give_name": 1, "birth_date": 1}}, {"$sort": {"birth_date": 1}} ])
内容的提问来源于stack exchange,提问作者Carlo
相关产品推荐
相关产品推荐

