我想在mongdb中存儲一些非常大的整數,正好(幾千個十進制數字)。這當然不適用於BSON支持的標準類型,我想要考慮最優雅的解決方法,因爲我想執行範圍搜索和類似的事情。此要求不包括將整數存儲爲字符串,因爲它會使範圍搜索不切實際。bson數組如何比較(在mongodb/pymongo中)?
我可以想到的一種方法是使用標準整數的(可變長度)數組對編碼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。
那麼我就可以做使用排序{「財富」:1}和我的機器上(與pymongo)返回它們的順序弗朗西斯<我<法案<布魯斯<守財奴,符合市場預期。
不過,我做的是我還沒有看到任何相關文檔有關的方式BSON陣列比較假設和範圍搜索似乎不工作,我認爲(例如道路,
find({"fortune":{$gte:[2,5,0]}})
沒有返回任何文件,但我希望布魯斯和史克魯奇)。
任何人都可以幫助我嗎?謝謝
Dhruv和Remon下面描述的兩種解決方案都要求我知道最大長度,並且存儲大量填充零。 – user1199915 2012-04-13 12:13:30