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

MongoDB如何查询数组子文档:获取指定股票指定日期行情

如何查询指定股票代码和日期的行情子文档

针对你给出的MongoDB股票数据结构,以下是两种获取指定股票(如AAPL)指定日期(如2022-04-25)行情子文档的方法:

方法1:使用find()查询

这种方式简洁直接,适合单条件的数组元素匹配:

写法一:基础过滤+投影

db.stocks.find(
  { ticker: 'AAPL', 'quotes.date': '2022-04-25' },
  { 'quotes.$': 1, _id: 0 }
)
  • 第一个参数:过滤出股票代码为AAPL,且行情数组中包含指定日期的文档
  • 第二个参数:quotes.$表示只返回数组中匹配到的第一个元素,_id: 0用于隐藏默认返回的_id字段

写法二:使用$elemMatch明确匹配数组元素

db.stocks.find(
  { ticker: 'AAPL', quotes: { $elemMatch: { date: '2022-04-25' } } },
  { 'quotes.$': 1, _id: 0 }
)

效果和写法一一致,$elemMatch更清晰地指定了数组元素的匹配条件,适合数组多字段匹配场景。

方法2:使用aggregate()聚合查询

聚合查询灵活性更高,适合需要对数据做后续处理的场景:

写法一:投影出目标行情

db.stocks.aggregate([
  { $match: { ticker: 'AAPL' } }, // 先筛选出AAPL的文档
  { $unwind: '$quotes' }, // 把行情数组拆分成单个文档
  { $match: { 'quotes.date': '2022-04-25' } }, // 筛选指定日期的行情
  { $project: { _id: 0, quote: '$quotes' } } // 只保留行情数据,去掉_id
])

写法二:直接返回行情子文档

如果希望结果就是纯粹的行情数据,不带外层结构,可以用$replaceRoot:

db.stocks.aggregate([
  { $match: { ticker: 'AAPL' } },
  { $unwind: '$quotes' },
  { $match: { 'quotes.date': '2022-04-25' } },
  { $replaceRoot: { newRoot: '$quotes' } } // 将行情子文档设为结果根文档
])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 07:05:29