You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 08:57:06