Docs Menu
Docs Home
/
MongoDBマニュアル
/ /

時系列コレクションの制限

項目一覧

  • サポートされていない機能
  • 集計 $out と $merge
  • distinct コマンド
  • ドキュメントのサイズ
  • 更新と削除
  • 時系列セカンダリインデックス
  • MongoDB 6.0 以降の時系列セカンダリインデックス
  • MongoDB 5.0 以前の時系列セカンダリインデックス
  • 上限付きコレクション
  • コレクション タイプの変更
  • timeFieldmetaField の変更
  • の変更 granularity
  • シャーディング
  • シャーディング管理コマンド
  • シャードキー フィールド
  • 再シャーディング
  • トランザクション
  • 表示制限
  • スナップショットの分離

このページでは、 時系列コレクションの使用に関する制限について説明します。

次の機能は、時系列コレクションではサポートされていません。

Atlas Device Sync のサポートは、Atlas Data Ingest を使用する時系列コレクションに限定されます。

$outまたは$merge集計パイプライン ステージを使用して、別のコレクションのデータを時系列コレクションに追加することはできません。

時系列コレクションは一意のデータ構造であるため、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"}}])

これは、次のように機能します。

  1. meta.projectmeta.type複合インデックスを作成し、集計をサポートする。

  2. $match ステージが meta.project = 10 のドキュメントにフィルターをかける。

  3. $group ステージでは、meta.type をグループキーとして使用して、一意の値ごとに 1 つのドキュメントを出力する。

時系列コレクション内のドキュメントの最大サイズは 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 以降では、任意のフィールドにセカンダリインデックスを追加できます。

これらのインデックス タイプはサポートされていません。

TTLインデックス プロパティはサポートされていません。 TTL 削除の場合は、 expireAfterSeconds を使用します。

次のインデックス タイプは、 metaFieldでのみ作成できます。

MongoDB 6.0 以降で使用可能な時系列セカンダリ インデックスの改善については、「 MongoDB 6.0 の時系列セカンダリ インデックス 」を参照してください。

時系列コレクションセカンダリインデックスがあり、機能の互換性バージョン (fCV) をダウングレードする必要がある場合は、ダウングレードした fCV と互換性のないセカンダリインデックスを最初に削除する必要があります。setFeatureCompatibilityVersion を参照してください。

MongoDB 5.0 以前の場合は、

  • metaField はセカンダリインデックスを持つことができます。

  • timeField はセカンダリインデックスを持つことができます。

  • metaField がドキュメントの場合には、ドキュメント内のフィールドにセカンダリインデックスを追加できます。

Tip

以下も参照してください。

時系列コレクションを 上限付きコレクションとして作成することはできません。

コレクションを作成するときにのみコレクション タイプを設定できます。

  • 既存のコレクションを時系列コレクションに変換することはできません。

  • 時系列コレクションを別のコレクション タイプに変換することはできません。

既存のコレクションから時系列コレクションにデータを移動するには、データを時系列コレクションに移行します。

コレクションを作成するときにのみ、コレクションの timeField パラメーターと metaField パラメーターを設定できます。これらのパラメーターを後で変更することはできません。

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 を含む他のフィールドは許可されません。

シャードキーを指定する場合には、次のいずれかです。

Tip

timeField だけをシャードキーとして指定することは避けてください。timeField単調に増加するため、すべての書き込みがクラスター内の 1 つのチャンクで発生することがあります。理想的には、データをチャンク間で均等に分散します。

シャードキーを最適に選択する方法については、以下を参照してください。

シャーディングされた時系列コレクションを再シャーディングすることはできません。 ただし、そのシャードキーは変更できます。

トランザクションの時系列コレクションに書き込むことはできません。

注意

時系列コレクションからの読み取りはトランザクションでサポートされています。

時系列コレクションは、書き込み可能な非マテリアライズドビューです。ビューの制限は、時系列コレクションに適用されます。

  • 時系列バケットコレクションの名前空間(つまり、system.buckets というプレフィックスが付いたコレクション)からビューを作成することはできません。

読み取り保証"snapshot"を使用した時系列コレクションの読み取り操作は、読み取り操作内にコレクションに対する同時削除操作または名前変更操作がない場合にのみスナップショットの分離を保証します。 別の粒度設定を使用して同じ名前空間に時系列コレクションを再作成しても、完全なスナップショット分離は生成されません。

戻る

時系列圧縮