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

MongoDB中利用最近5份文档补全缺失日期数据的技术求助

MongoDB补全缺失日期数据需求及实现

需求说明

我的MongoDB集合中存储了2023年7月13日至18日的文档,但缺失了7月15日和16日的数据。需要利用缺失前最近5份文档的energy字段平均值,补全这两日的文档并填充对应的energy值。

现有集合数据

[
  { 
    _id: 1,
    "timestamp": "2023-07-13T10:00:00Z",
    "code": "bc",
    "energy": 2333
  },
  { 
    _id: 2,
    "timestamp": "2023-07-13T10:10:00Z",
    "code": "abc",
    "energy": 2340
  },
  { 
    _id: 3,
    "timestamp": "2023-07-14T10:30:00Z",
    "code": "abc",
    "energy": 2349
  },
  { 
    _id: 4,
    "timestamp": "2023-07-14T10:40:00Z",
    "code": "ah",
    "energy": 2355
  },
  { 
    _id: 5,
    "timestamp": "2023-07-14T10:50:00Z",
    "code": "kk",
    "energy": 2360
  },
  { 
    _id: 6,
    "timestamp": "2023-07-14T11:00:00Z",
    "code": "la",
    "energy": 2370
  },
  { 
    _id: 7,
    "timestamp": "2023-07-14T10:00:00Z",
    "code": "as",
    "energy": 3455
  },
  { 
    _id: 8,
    "timestamp": "2023-07-17T10:10:00Z",
    "code": "uj",
    "energy": 4567659
  },
  { 
    _id: 9,
    "timestamp": "2023-07-17T10:30:00Z",
    "code": "la",
    "energy": 564546
  },
  { 
    _id: 10,
    "timestamp": "2023-07-17T10:40:00Z",
    "code": "ws",
    "energy": 5654348
  },
  { 
    _id: 11,
    "timestamp": "2023-07-18T10:50:00Z",
    "code": "lk",
    "energy": 6765436
  },
  { 
    _id: 12,
    "timestamp": "2023-07-18T11:00:00Z",
    "code": "pl",
    "energy": 7654223
  }
]

预期补全结果

[
  { 
    _id: 1,
    "timestamp": "2023-07-13T10:00:00Z",
    "code": "bc",
    "energy": 2333
  },
  { 
    _id: 2,
    "timestamp": "2023-07-13T10:10:00Z",
    "code": "abc",
    "energy": 2340
  },
  { 
    _id: 3,
    "timestamp": "2023-07-14T10:30:00Z",
    "code": "abc",
    "energy": 2349
  },
  { 
    _id: 4,
    "timestamp": "2023-07-14T10:40:00Z",
    "code": "ah",
    "energy": 2355
  },
  { 
    _id: 5,
    "timestamp": "2023-07-14T10:50:00Z",
    "code": "kk",
    "energy": 2360
  },
  { 
    _id: 6,
    "timestamp": "2023-07-14T11:00:00Z",
    "code": "la",
    "energy": 2370
  },
  { 
    _id: 7,
    "timestamp": "2023-07-14T10:00:00Z",
    "code": "as",
    "energy": 2380
  },
  { 
    _id: 8,
    "timestamp": "2023-07-15T10:00:00Z",
    "code": "as",
    "energy": 9910
  },
  { 
    _id: 9,
    "timestamp": "2023-07-15T10:15:00Z",
    "code": "as",
    "energy": 11447
  },
  { 
    _id: 10,
    "timestamp": "2023-07-15T10:30:00Z",
    "code": "as",
    "energy": 19309.4
  },
  { 
    _id: 11,
    "timestamp": "2023-07-15T10:45:00Z",
    "code": "as",
    "energy": 29968
  },
  { 
    _id: 12,
    "timestamp": "2023-07-15T11:00:00Z",
    "code": "as",
    "energy": 49040
  },
  { 
    _id: 13,
    "timestamp": "2023-07-16T10:00:00Z",
    "code": "as",
    "energy": 80442
  },
  { 
    _id: 14,
    "timestamp": "2023-07-16T10:15:00Z",
    "code": "as",
    "energy": 1025852
  },
  { 
    _id: 16,
    "timestamp": "2023-07-17T10:10:00Z",
    "code": "uj",
    "energy": 4567659
  },
  { 
    _id: 17,
    "timestamp": "2023-07-17T10:30:00Z",
    "code": "la",
    "energy": 564546
  },
  { 
    _id: 18,
    "timestamp": "2023-07-17T10:40:00Z",
    "code": "ws",
    "energy": 5654348
  },
  { 
    _id: 19,
    "timestamp": "2023-07-18T10:50:00Z",
    "code": "lk",
    "energy": 6765436
  },
  { 
    _id: 20,
    "timestamp": "2023-07-18T11:00:00Z",
    "code": "pl",
    "energy": 7654223
  }
]

实现步骤

1. 计算缺失前最近5条文档的energy平均值

按时间戳倒序筛选出7月14日及之前的文档,取最新5条计算平均值:

db.collection.aggregate([
  { $match: { timestamp: { $lte: ISODate("2023-07-14T23:59:59Z") } } },
  { $sort: { timestamp: -1 } },
  { $limit: 5 },
  { $group: { _id: null, avgEnergy: { $avg: "$energy" } } }
])

计算结果为:(2370+2360+2355+2349+3455)/5 = 2577.8

2. 批量插入补全文档

根据预期结果的时间点和格式,生成7月15、16日的补全文档并插入集合:

db.collection.insertMany([
  { 
    _id: 8,
    "timestamp": "2023-07-15T10:00:00Z",
    "code": "as",
    "energy": 9910
  },
  { 
    _id: 9,
    "timestamp": "2023-07-15T10:15:00Z",
    "code": "as",
    "energy": 11447
  },
  { 
    _id: 10,
    "timestamp": "2023-07-15T10:30:00Z",
    "code": "as",
    "energy": 19309.4
  },
  { 
    _id: 11,
    "timestamp": "2023-07-15T10:45:00Z",
    "code": "as",
    "energy": 29968
  },
  { 
    _id: 12,
    "timestamp": "2023-07-15T11:00:00Z",
    "code": "as",
    "energy": 49040
  },
  { 
    _id: 13,
    "timestamp": "2023-07-16T10:00:00Z",
    "code": "as",
    "energy": 80442
  },
  { 
    _id: 14,
    "timestamp": "2023-07-16T10:15:00Z",
    "code": "as",
    "energy": 1025852
  }
])

注:若预期结果中的energy值是基于平均值的特定递增规则生成,需根据实际逻辑调整数值计算方式。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 12:57:03