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

如何在MongoDB中仅查询返回嵌入式文档数组的指定子集

MongoDB 嵌入式文档数组过滤解决方案

你之前使用find查询返回完整data数组的原因是:普通find的查询条件仅用于判断整个文档是否符合匹配规则,不会对文档内的数组字段做裁剪,只要数组中存在至少一个符合条件的元素,完整数组就会被返回。

你可以通过聚合管道结合$filter操作符实现需求,具体实现如下:

db.你的集合名.aggregate([
  // 第一阶段:先筛选出符合条件的文档,减少后续计算量
  {
    $match: {
      "_id": { $in: ["Stock1", "Stock3"] },
      "data.date": { 
        $gte: ISODate("2010-01-01T00:00:00.000Z"), 
        $lte: ISODate("2020-01-01T00:00:00.000Z") 
      }
    }
  },
  // 第二阶段:过滤data数组,仅保留符合日期范围的元素
  {
    $project: {
      "_id": 1,
      "data": {
        $filter: {
          input: "$data",
          as: "item",
          cond: {
            $and: [
              { $gte: ["$$item.date", ISODate("2010-01-01T00:00:00.000Z")] },
              { $lte: ["$$item.date", ISODate("2020-01-01T00:00:00.000Z")] }
            ]
          }
        }
      }
    }
  }
])

如果你的集合中date字段存储的是字符串类型而非ISODate类型,直接把代码中ISODate()包裹的部分替换为对应格式的字符串即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 16:06:03