Working with Time Series Collections

1. Creating Time Series Collection

FieldDescription
timeseries.timeFieldRequired Date field
timeseries.metaFieldOptional grouping field
timeseries.granularity"seconds" | "minutes" | "hours"
expireAfterSecondsAuto-expire old data
db.createCollection("metrics", {
  timeseries: { timeField: "ts", metaField: "sensorId", granularity: "seconds" },
  expireAfterSeconds: 2592000
});

2. Setting Time Field

RulesDetail
RequiredMust exist in every doc
TypeBSON Date
ImmutableCannot update after insert

3. Setting Meta Field

AspectDetail
PurposeGroups related measurements (sensor, device id, symbol)
TypeAny BSON type (often subdocument)
UpdatesAllowed (5.0.5+) on meta only
IndexesAutomatic compound (metaField, timeField)

4. Configuring Granularity

ValueBucket Span
seconds (default)1 hour
minutes24 hours
hours30 days
bucketMaxSpanSeconds / bucketRoundingSeconds NEWCustom (6.3+)

5. Inserting Time Series Data

MethodDetail
insertOne / insertManyStandard write API
Bulk insertRecommended for high-throughput
BackfillSupported but reduces bucket efficiency

6. Querying Time Series Data

PatternDetail
find()Returns individual measurements (unbucketed)
Range on timeHighly optimized via bucket index
Meta filterIndexed by default

7. Using Aggregation with Time Series

PatternOperator
Downsampling$dateTrunc + $group
Moving avg$setWindowFields + $avg
Gap filling$densify + $fill

8. Setting Expiration

OptionEffect
expireAfterSecondsPer-bucket TTL based on timeField
ModifycollMod with expireAfterSeconds

9. Understanding Bucketing Behavior

AspectDetail
Internal storageOne BSON doc per (metaField, time-bucket)
Bucket cap1000 measurements OR 128KB
CompressionColumnar compressed (7.0+)

10. Optimizing Time Series Performance

TipEffect
Insert in time orderMaximizes bucket reuse
Stable metaFieldAvoid high-cardinality random meta
Correct granularityMatch data arrival rate
Bulk writesAmortize cost

11. Creating Secondary Indexes on Time Series

AllowedNotes
On metaField + timeFieldAuto-created
On measurement fieldsAllowed; affects bucket index efficiency
Geo (2dsphere)Supported (5.0.5+)
TTLUse collection-level expireAfterSeconds