MongoDB如何拼接经排序处理后的衍生数组?
解决方案
你的需求完全可以实现,问题出在语法格式错误——在$concatArrays的数组元素中,$sortArray操作符没有被包裹在对象大括号{}中,MongoDB无法识别这种写法。
修正后的直接投影写法
db.films.findOne( { _id: ObjectId("64d69473da87c0c91ae7c596") }, { title: 1, reviews: { $concatArrays: [ "$reviews", { $sortArray: { input: "$reviews", sortBy: { creationdate: -1 } } } ] } } );
更易扩展的聚合管道写法(推荐)
如果后续需要添加更多数据处理逻辑,用聚合管道的方式可读性和扩展性更强:
db.films.aggregate([ // 匹配目标文档 { $match: { _id: ObjectId("64d69473da87c0c91ae7c596") } }, // 生成排序后的reviews数组 { $addFields: { sortedReviews: { $sortArray: { input: "$reviews", sortBy: { creationdate: -1 } } } } }, // 拼接原数组与排序后的数组 { $project: { title: 1, reviews: { $concatArrays: ["$reviews", "$sortedReviews"] } } } ]);
错误原因说明
MongoDB的聚合操作符(如$sortArray、$concatArrays)必须以{ 操作符: 配置对象 }的形式存在。你之前的写法中,$sortArray直接作为数组元素,未包裹大括号,破坏了JSON语法结构,导致数据库无法解析。
内容的提问来源于stack exchange,提问作者D. Rattansingh
相关产品推荐
相关产品推荐

