時系列コレクションの制限
項目一覧
このページでは、 時系列コレクションの使用に関する制限について説明します。
サポートされていない機能
次の機能は、時系列コレクションではサポートされていません。
Atlas Device Sync のサポートは、Atlas Data Ingest を使用する時系列コレクションに限定されます。
集計 $out と $merge
$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.1 以降では、一部の削除操作と更新操作を実行できます。
削除 コマンドは、次の要件を満たす必要があります。
照合できるのは metaField フィールド値のみです。
削除コマンドでは、削除されるドキュメント数を制限せず、
justOne: false
を設定するか、deleteMany()
メソッドを使用します。
1970-01-01T00:00:00.000Z
の前または 2038-01-19T03:14:07.000Z
の後に timeField
タイムスタンプがあるドキュメントが時系列コレクションに含まれる場合、TTL(time to live) 機能によってコレクションからドキュメントが削除されることはありません。
TTL 削除の詳細については、「TTL を設定してコレクションのデータを期限切れにする」を参照してください。
更新コマンドは、次の要件を満たしている必要があります。
照合できるのは、
metaField
フィールドの値のみです。変更できるのは、
metaField
フィールドの値のみです。更新ドキュメントには、更新演算子式しか含めることができません。
更新コマンドでは、更新されるドキュメント数を制限せず、
multi: true
を設定するか、updateMany()
メソッドを使用します。更新コマンドでは upsert: true を設定しないでください。
MongoDB 5.0 では、時系列コレクションは挿入操作と読み取りクエリのみをサポートします。更新操作および手動削除操作はエラーになります。
古いデータを自動的に削除するには、自動削除(TTL)を設定します。
コレクションからすべてのドキュメントを削除するには、drop()
メソッドを使用してコレクションを削除します。
時系列セカンダリインデックス
MongoDB 6.0 ではセカンダリインデックスのサポートが改善されています。
MongoDB 6.0 以降の時系列セカンダリインデックス
MongoDB 6.0 以降では、任意のフィールドにセカンダリインデックスを追加できます。
これらのインデックス タイプはサポートされていません。
TTLインデックス プロパティはサポートされていません。 TTL 削除の場合は、 expireAfterSeconds を使用します。
次のインデックス タイプは、 metaField
でのみ作成できます。
MongoDB 6.0 以降で使用可能な時系列セカンダリ インデックスの改善については、「 MongoDB 6.0 の時系列セカンダリ インデックス 」を参照してください。
時系列コレクションにセカンダリインデックスがあり、機能の互換性バージョン (fCV) をダウングレードする必要がある場合は、ダウングレードした fCV と互換性のないセカンダリインデックスを最初に削除する必要があります。setFeatureCompatibilityVersion
を参照してください。
MongoDB 5.0 以前の時系列セカンダリインデックス
MongoDB 5.0 以前の場合は、
metaField
はセカンダリインデックスを持つことができます。timeField
はセカンダリインデックスを持つことができます。metaField
がドキュメントの場合には、ドキュメント内のフィールドにセカンダリインデックスを追加できます。
上限付きコレクション
時系列コレクションを 上限付きコレクションとして作成することはできません。
コレクション タイプの変更
コレクションを作成するときにのみコレクション タイプを設定できます。
既存のコレクションを時系列コレクションに変換することはできません。
時系列コレクションを別のコレクション タイプに変換することはできません。
既存のコレクションから時系列コレクションにデータを移動するには、データを時系列コレクションに移行します。
timeField
と metaField
の変更
コレクションを作成するときにのみ、コレクションの timeField
パラメーターと metaField
パラメーターを設定できます。これらのパラメーターを後で変更することはできません。
の変更 granularity
granularity
を設定した後は、一度に 1 レベルずつ増やすことができます。 granularity
は、 "seconds"
から"minutes"
に、または"minutes"
から"hours"
に変更できます。 その他の変更は許可されません。
granularity
を"seconds"
から"hours"
に変更するには、まずgranularity
を"minutes"
に増やし、次に"hours"
に増やします。
シャーディング
MongoDB 5.1(および 5.0.6)以降では、シャーディングされた時系列コレクションを作成できます。
MongoDB 5.0.6 より前のバージョンでは、時系列コレクションをシャーディングできません。
シャーディング管理コマンド
シャーディングされた時系列コレクションでは、シャーディング管理コマンドを実行できません。
シャードキー フィールド
時系列コレクションをシャーディングする場合、シャードキーで指定できるのは次のフィールドのみです。
この
metaField
サブフィールド
metaField
この
timeField
シャードキーでこれらのフィールドの組み合わせを指定できます。シャードキーのパターンでは、_id
を含む他のフィールドは許可されません。
シャードキーを指定する場合には、次のいずれかです。
metaField
またはtimeField
でなければなりません:シャードキーのパターン末尾
Tip
timeField
だけをシャードキーとして指定することは避けてください。timeField
は単調に増加するため、すべての書き込みがクラスター内の 1 つのチャンクで発生することがあります。理想的には、データをチャンク間で均等に分散します。
シャードキーを最適に選択する方法については、以下を参照してください。
再シャーディング
シャーディングされた時系列コレクションを再シャーディングすることはできません。 ただし、そのシャードキーは変更できます。
トランザクション
トランザクションの時系列コレクションに書き込むことはできません。
注意
時系列コレクションからの読み取りはトランザクションでサポートされています。
表示制限
時系列コレクションは、書き込み可能な非マテリアライズドビューです。ビューの制限は、時系列コレクションに適用されます。
時系列バケットコレクションの名前空間(つまり、
system.buckets
というプレフィックスが付いたコレクション)からビューを作成することはできません。
スナップショットの分離
読み取り保証"snapshot"
を使用した時系列コレクションの読み取り操作は、読み取り操作内にコレクションに対する同時削除操作または名前変更操作がない場合にのみスナップショットの分離を保証します。 別の粒度設定を使用して同じ名前空間に時系列コレクションを再作成しても、完全なスナップショット分離は生成されません。