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

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

項目一覧

  • サポートされていない機能
  • 集計 $merge
  • distinct コマンド
  • 地理空間クエリ
  • ドキュメントのサイズ
  • 拡張された日付範囲
  • Updates
  • 時系列セカンダリインデックス
  • 上限付きコレクション
  • コレクション タイプの変更
  • timeFieldmetaField の変更
  • 粒度
  • バケット サイズ
  • バケット パラメータの変更
  • シャーディング
  • シャーディング管理コマンド
  • シャードキー フィールド
  • 再シャーディング
  • トランザクション
  • ビュー
  • スナップショットの分離

時系列コレクションは通常、一般的なコレクションと同様に動作しますが、いくつかの制限があります。

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

$merge 集計ステージを使用して、別のコレクションのデータを時系列コレクションに追加することはできません。$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 つのドキュメントを出力する。

時系列コレクションは、2dsphere インデックスに対するクエリからの地理空間データをソートするための $geoNear 集計ステージのみをサポートします。時系列コレクションでは、$near$nearSphere 演算子は使用できません

時系列コレクション内のドキュメントの最大サイズは 4 MB です。

1970-01-01T00:00:00.000Z の前または 2038-01-19T03:14:07.000Z の後に timeField タイムスタンプがあるドキュメントが時系列コレクションに含まれる場合、TTL(time to live) 機能によってコレクションからドキュメントが削除されることはありません。

TTL 削除の詳細については、「TTL を設定してコレクションのデータを期限切れにする」を参照してください。

時系列コレクションに 1970-01-01T00:00:00.000Z の前または 2038-01-19T03:14:07.000Z の後に timeField タイムスタンプが付いたドキュメントが含まれている場合は、timeField にインデックスを作成してクエリを最適化してください。

更新コマンドは、次の要件を満たしている必要があります。

  • 照合できるのは、 metaField フィールドの値のみです。

  • 変更できるのは、 metaField フィールドの値のみです。

  • 更新ドキュメントには、更新演算子式しか含めることができません。

  • 更新コマンドでは、更新されるドキュメント数を制限せず、multi: true を設定するか、updateMany() メソッドを使用します。

  • 更新コマンドでは upsert: true を設定しないでください。

古いデータを自動的に削除するには、自動削除(TTL)を設定します。

MongoDB は、時系列コレクションの次のインデックスを部分的にサポートしています。

MongoDB は、時系列コレクションで次のインデックスタイプをサポートしていません。

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

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

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

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

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

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

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

どの粒度パラメーターの設定でも、バケットの最大サイズは 1000 回の測定値または 125 KB のデータ量のうち、どちらか小さい方です。MongoDB では、ワーキングセットのバケットが WiredTiger キャッシュに収まるように、多数のユニークな値を持つ高濃度データに対しては、最大サイズを小さくすることもできます。

コレクションの granularity またはカスタムバケットパラメーターの bucketMaxSpanSecondsbucketRoundingSeconds を設定すると、バケットの対象となるタイムスパンを増やすことはできますが、減らすことはできません。パラメーターを変更するには、collMod コマンドを使用します。以下に例を挙げます。

db.runCommand({
collMod: "timeseries",
timeseries: { bucketMaxSpanSeconds: 3600, bucketRoundingSeconds: 3600 }
})

注意

bucketMaxSpanSecondsbucketRoundingSeconds は等しくなければなりません。1 つのパラメーターを変更する場合は、他のパラメーターも同じ値に設定する必要があります。

時系列コレクションには、いくつかのシャーディングの制限があります。

シャーディングされた時系列コレクションでは、シャーディング管理コマンドを実行できません。

時系列コレクションをシャーディングする場合、シャードキーで指定できるのは次のフィールドのみです。

  • この metaField

  • サブフィールド metaField

  • この timeField

シャードキーでこれらのフィールドの組み合わせを指定できます。シャードキーのパターンでは、_id を含む他のフィールドは許可されません。

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

Tip

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

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

MongoDB 8.0 以降、時系列コレクションでシャードキーとして timeField を使用することは非推奨になります。

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

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

注意

MongoDB は、トランザクション内の時系列コレクションからの読み取りをサポートしています。

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

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

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

戻る

ベストプラクティス