私はmongdbにいくつかの非常に大きな整数を正確に(数千の10進数)格納したいと思います。これはもちろんBSONでサポートされている標準タイプでは機能しません。範囲検索などを実行したいと考えて、最も洗練された回避策を考えています。この要件は、範囲検索を非実用的にするので、文字列としての整数の格納を除外します。bson配列はどのように(mongodb/pymongoで)比較されますか?
私が考えることの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]}
を持つことができますこのようにブルース・ウェインの純資産は、ビル・ゲイツ2^32 + 1000とスクルージ・マクダックの2^320、10 * 2^32です。
私は、使用してソートを行うことができます{「幸運を」:1}と私のマシン上で(pymongoで)予想通り、それは、順番フランシス<私<法案<ブルース<スクルージでそれらを返します。
しかし、私はBSONアレイを比較する方法についてはどこにも文書化、および範囲検索は、私が(例えば、
find({"fortune":{$gte:[2,5,0]}})
だと思うように動作していないようです見ていない仮定を作っています文書は返されませんが、私はブルースとスクルージを望みます)。
誰でも手伝ってもらえますか?ありがとう
以下のDhruvとRemonによって説明されている解決方法では、最大長を知っていなければならず、たくさんのパディングゼロを保存する必要があります。 – user1199915