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

如何为MongoDB子文档数组中的日期字段创建唯一索引?

解决MongoDB股票报价数组子文档日期重复及索引问题

1. 清理现有文档中的重复日期子文档

当前集合中存在同一ticker下quotes数组包含重复日期子文档的情况,可通过聚合管道更新完成去重:

db.aggregates_1_day.updateMany(
  {},
  [
    {
      $set: {
        quotes: {
          $reduce: {
            input: "$quotes",
            initialValue: [],
            in: {
              $cond: [
                { $in: ["$$this.date", "$$value.date"] },
                "$$value",
                { $concatArrays: ["$$value", ["$$this"]] }
              ]
            }
          }
        }
      }
    }
  ]
)

该操作遍历每个文档的quotes数组,仅保留每个日期对应的唯一子文档。

2. 创建复合唯一索引保障数据唯一性

若要实现同一股票(ticker)下报价日期唯一,需创建ticker与quotes.date的复合唯一索引——不能单独给quotes.date建唯一索引,否则会限制全集合所有股票的报价日期不能重复,不符合业务逻辑:

db.aggregates_1_day.createIndex(
  { "ticker": 1, "quotes.date": 1 },
  { unique: true }
)

索引创建完成后,MongoDB会阻止任何向同一ticker添加重复日期报价的插入或更新操作,抛出重复键错误。

内容的提问来源于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 02:20:48