通常はそうではないユースケースで実行可能である場合は、これをお勧めします。時系列データは注目すべき例外です。 $addToSet
には実際には適用されません および$push
配列を大きくするとドキュメントのサイズが大きくなる傾向があるためです。
止まる。何万ものエントリを持つ絶えず成長するアレイが必要ですか?特定のエントリを取り戻すためにクエリを実行しますか?配列エントリのフィールドにインデックスを付けますか?おそらく、ドキュメントの構造を再考する必要があります。たぶんあなたはそれぞれのdata
が欲しいでしょう market
のようなフィールドを持つ別のドキュメントになるエントリ 、type
、createdAt
それぞれに複製されますか?ドキュメントの移動について心配する必要はありません。
アレイが75Kエントリに成長するのはなぜですか?ドキュメントあたりのエントリ数を減らすことはできますか?これは
いいえ、これはあまり役に立ちません。ドキュメントサイズは、配列内のnull値のBSONサイズに基づいて計算されるため、null
を置き換えると 別のタイプではサイズが大きくなり、とにかくドキュメントが書き換えられます。すべてのフィールドがそのタイプのデフォルト値に設定されているオブジェクトを使用して配列を事前に割り当てる必要があります。例:
{
"date" : ISODate("1970-01-01T00:00:00Z") // use a date type instead of a string date
"price" : 0,
"amount" : 0,
"tid" : "000000", // assuming 7 character code - strings icky for default preallocation
"type" : "none" // assuming it's "buy" or "sell", want a default as long as longest real values
}