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

Mongoose聚合查询中匹配对象数组倒数第二项_id的问题求助

解决方案

原写法问题说明

  • 缺少数组长度校验:如果数组长度小于2,$arrayElemAt会返回null,导致匹配逻辑异常
  • 比较符可能不符合需求:你当前使用了$gt(大于)比较符,如果需求是匹配倒数第二项_id等于指定值,需要替换为$eq(等于)

可行聚合写法示例

[
  {
    "$match": {
      $expr: {
        $and: [
          // 校验数组长度至少为2,避免取到无效值
          { $gte: [{ $size: "$path" }, 2] },
          // 匹配数组倒数第二项的_id,按需调整比较符($eq/$gt等)
          { 
            $eq: [
              { "$arrayElemAt": ["$path._id", -2] }, 
              mongoose.Types.ObjectId(req.params.id)
            ]
          }
        ]
      }
    }
  },
  {
    "$project": {
      "_id": 1,
      "name": 1,
      "isFile": {
        // 原逻辑可简化,直接判断$data是否不为null即可
        $ne: ["$data", null]
      }
    }
  }
]

注意事项

  • 如果你确实需要匹配_id大于指定值的场景,保留原有的$gt比较符即可
  • 把代码中的path替换为你Schema中实际的数组字段名
  • 确保req.params.id是合法的ObjectId字符串,否则类型转换会报错

内容的提问来源于stack exchange,提问作者user15455820

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 08:33:04