我一直在使用Morphia来保存Java中的持久对象。我也从控制台运行了一些批处理过程。我刚刚意识到一些值现在存储为NumberLong,而数字则存储为普通的Javascript数字。
我有这个字段的索引。一切似乎都没问题 - 如果我查询:{f: 100}
从控制台它仍然返回对象,即使它实际上包含{f: NumberLong(100)}
所有司机都这样吗?最好的做法是避免NumberLong,我可以在32位内部拟合值吗?如果我将所有NumberLongs转换为基本数字,我会保存大量数据和索引空间吗?
答案 0 :(得分:1)
普通的JavaScript编号是64位浮点数(双精度),占用8个字节,因此节省空间不是理由。在您的值中保持一致可能是有价值的,并且在不同的数字类型之间存在权衡。如果你想要32位整数,那么shell中有一个类型(NumberInt)。驱动程序通常会尝试将内容映射到驱动程序的语言中,但尽可能在驱动程序之间进行匹配。