$densify(补密)

最后更新:2026-10-09

$densify(补密)

$densify 在字段值之间补充缺失的中间值,生成新的文档序列,常用于时间序列插值——按小时、天等步长把缺失的时间点补齐,数值字段同样支持。需要指定字段、范围 range(步长、单位、边界)和可选的 partitionByFields 分区字段。

分类分组与窗口
MongoDB 版本5.1+
示例语言mongosh (Shell)

📝 语法

{ $densify: { field: "<字段>", range: { step: <步长>, unit: <单位>, bounds: <范围> }, partitionByFields: [ ... ] } }

⚙️ 参数

field要补密的字段,必须为数字或日期。
range定义步长、单位(日期时)与边界范围的对象。
partitionByFields分区字段,每组独立补密。

返回值:补充缺失值后的文档流

▶ 示例

请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):

// $densify:把温度数据按小时补全
db.temperature.aggregate([
  { $densify: {
    field: 'date',
    range: { step: 1, unit: 'hour', bounds: 'full' }
  } }
])

运行结果:

// 缺失的小时点被补齐,其他字段原样复制

📌 注意事项

📚 相关教程

❓ 常见问题

Q$densify 有什么用?
A时间序列数据缺失时按固定步长补齐时间点,便于绘图或做插值统计。
Qunit 有哪些可选?
A时间单位有 minute、hour、day、week、month、quarter、year 等。
Q$densify 会生成多少文档?
A取决于步长与边界:范围大步长小,文档数可能非常多,需要注意内存。
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏