私は mongdb にいくつかの非常に大きな整数 (10 進数で数千桁) を格納したいと考えています。もちろん、これは BSON でサポートされている標準型では機能しません。また、範囲検索などを実行したいことを考慮して、最もエレガントな回避策を考えようとしています。この要件により、整数を文字列として格納することは除外されます。これは、範囲検索が実用的でなくなるためです。
私が考えることができる 1 つの方法は、標準 int の (可変長) 配列を使用して 2^32 展開をエンコードし、この配列に配列自体の長さの最初のエントリを追加することです。このように、これらの配列の辞書式順序付けは、任意の大きな整数の通常の順序付けに対応します。
たとえば、コレクションには 5 つのドキュメントを含めることができます
{"name": "me", "fortune": [1,1000]}
{"name": "scrooge mcduck", "fortune": [11,1,0,0,0,0,0,0,0,0,0,0]}
{"name": "bruce wayne","fortune": [2, 10,0]}
{"name": "bill gates", "fortune": [2,1,1000]}
{"name": "francis", "fortune": [0]}
したがって、ブルース ウェインの純資産は 10*2^32、ビル ゲイツの純資産は 2^32+1000、スクルージ マクダックの純資産は 2^320 です。
次に、{"fortune":1} を使用して並べ替えを行うと、私のマシン (pymongo を使用) では、予想どおり、フランシス < 私 < ビル < ブルース < スクルージの順序でそれらを返します。
ただし、BSON 配列の比較方法についてどこにも文書化されていないことを前提としており、範囲検索は私の考えどおりには機能しないようです (たとえば、
find({"fortune":{$gte:[2,5,0]}})
ドキュメントは返されませんが、ブルースとスクルージが欲しいと思います)。
誰でも私を助けることができますか?ありがとう