我想在 mongdb 中存储一些非常大的整数,确切地说(几千个十进制数字)。这当然不适用于 BSON 支持的标准类型,考虑到我想执行范围搜索和类似的事情,我正在尝试考虑最优雅的解决方法。此要求不包括将整数存储为字符串,因为它使范围搜索不切实际。
我能想到的一种方法是使用标准整数的(可变长度)数组对 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)按 francis < me < bill < bruce < scrooge 的顺序返回它们,正如预期的那样。
但是,我假设我没有在任何地方看到关于 BSON 数组比较方式的记录,并且范围搜索似乎不像我想的那样工作(例如,
find({"fortune":{$gte:[2,5,0]}})
不返回任何文件,但我希望得到 bruce 和 scrooge)。
谁能帮我?谢谢