可排序的十进制值(没有double / float)。选择哪种方式?

时间:2014-02-07 19:06:32

标签: mongodb sorting decimal bigdecimal

我正在寻找如何使用MongoDB保存小数,并偶然发现了一些想法。

  1. 将其另存为String(因为我使用的是Java Spring Framework,这是默认实现)

    value: "3.44"

  2. 使用带有未缩放值+缩放的嵌套文档保存ebay方式:http://www.technology-ebay.de/the-teams/mobile-de/blog/mapping-bigdecimals-with-morphia-for-mongodb.html

    value: { unscaled: NumberLong(344) , scale: 2 }

  3. 分别保存小数点前后的数字

    value: { major: 3 , minor: 44 }

  4. 基本上我会说:

    1. 没用,因为我无法将其排序为数字(即"9" > "12"

    2. 如果ebay使用它,那就不会那么糟糕。但我无法弄清楚如何对这些值进行排序?!

    3. 排序非常简单:db.collection.find().sort({"value.major":1, "value.minor":1})

    4. 问题:

      你如何实现它?

      如何使用方法2.进行排序?

      谢谢!

      解决方法:

      1. major存储为整数,将minor存储为字符串:

        value: { major: 3 , minor: "44" }

      2. 定义最大值。您的小数精度,然后您可以用零填充次值。例如,精度= 10:

        value: { major: 3 , minor: 4400000000 }

0 个答案:

没有答案