不支持的功能
时间序列集合不支持以下功能:
Atlas Device Sync (如果时间序列集合不对称同步,则支持 Atlas Device Sync。 有关详细信息,请参阅启用 Atlas Device Sync 。)
约束
测量文档的最大大小为4 MB。
聚合 $out 和 $merge
distinct 命令
由于时间序列集合的独特数据结构, MongoDB 无法有效地为不同值建立索引。避免在时间序列集合中使用 distinct 命令或 db.collection.distinct()辅助方法。取而代之的是,使用 $group 聚合按不同的值对文档进行分组。
例如,要在 meta.project = 10 的文档上查询不同的 meta.type 值,而不是:
db.foo.distinct("meta.type", {"meta.project": 10})
使用:
db.foo.createIndex({"meta.project":1, "meta.type":1}) db.foo.aggregate([{$match: {"meta.project": 10}}, {$group: {_id: "$meta.type"}}])
具体操作如下:
文档大小
时间序列集合中文档的最大大小为 4 MB。
更新和删除
从 MongoDB 5.0.5开始, 您可以执行某些删除和更新操作。
删除命令必须满足以下要求:
该查询只能匹配
metaField字段值。删除命令不得限制要删除的文档数量。您必须使用带有
justOne: false或deleteMany()方法的删除命令。
更新命令必须满足以下要求:
该查询只能匹配
metaField字段值。更新命令只能修改
metaField字段值。必须使用仅包含更新操作符表达式的更新文档来执行更新。
更新命令不得限制要更新的文档数量。您必须使用带有
multi: true或updateMany()方法的更新命令。update 命令可能无法设置upsert: true。
要自动删除旧数据,请设置自动删除 (TTL)。
要删除某个集合中的所有文档,请使用 drop() 方法删除该集合。
如果时间序列集合包含时间戳在 1970-01-01T00:00:00.000Z 之前或 2038-01-19T03:14:07.000Z 之后为 timeField 的文档,则 TTL“生存时间”功能不会从集合中删除任何文档。
有关 TTL 删除的详细信息,请参阅通过设置 TTL 使集合中的数据过期。
辅助索引
您可以在指定为timeField和metaField的字段上添加二级索引。 如果metaField字段的字段值是文档,您还可以在该文档内的字段上创建二级索引。
metaField 不支持以下索引类型:
二级索引不支持以下索引属性:
固定大小集合
时间序列集合无法创建为固定大小集合。
修改集合类型
集合的类型只能在创建集合时设置:
要将数据从现有集合移动到时间序列集合,请将数据迁移到时间序列集合。
修改 timeField 和 metaField
您只能在创建集合时设置集合的 timeField 和 metaField 参数。创建后,这些参数无法修改。
修改 granularity
设置granularity后,一次只能增加一个级别。 从"seconds"到"minutes"或从"minutes"到"hours" 。 不允许进行其他更改。 如果需要将granularity从"seconds"更改为"hours" ,请先将granularity增加到"minutes" ,然后再增加到"hours" 。
分片
从 MongoDB 5.0.6开始, 支持分片时间序列集合。 使用分片时间序列集合时,您无法修改分片时间序列集合的granularity 。
在 MongoDB 5.0.6 之前的版本中,您无法对时间序列集合进行分片。
分片管理命令
您无法在分片的时间序列集合上运行分片管理命令。
事务
注意
在事务中支持读取时间序列集合。
快照隔离
只有在读取操作中未并发对集合进行删除或重命名操作的情况下,对具有读关注 "snapshot" 的时间序列集合进行的读取操作才能保证快照隔离。在同一命名空间上以不同的粒度设置重新创建时间序列集合不会产生完全的快照隔离。