Spring Data MongoDB BigDecimal支持

Rod*_*ani 6 mongodb spring-data-mongodb

我怀疑与Spring Data MongoDB的BigDecimal值支持有关,有人可以帮我提供一些有关它的新闻,是否会支持这种类型,或者是否有人知道解决方法来满足我的需求.这就是交易:我正在开发一个项目,我们使用MongoDB作为DB和Spring作为框架,我们想保存我们应该在数据库中获得货币值的字段作为BigDecimal,我读过那个mongo只接受double作为浮点数,但我不认为这种类型会有用.你能问我一些关于它的事吗?

Chr*_*obl 10

Spring Data MongoDB 在读取时将BigDecimal值转换为String写入和返回.请查看参考手册的数据映射和类型转换部分.


Luk*_*ski 10

您可以更改BigDecimaldo 的转换器,Decimal128这是NumberDecimal自mongo 3.4以来的java表示:

@Bean
public MongoCustomConversions mongoCustomConversions() {
    return new MongoCustomConversions(Arrays.asList(

        new Converter<BigDecimal, Decimal128>() {

            @Override
            public Decimal128 convert(@NonNull BigDecimal source) {
                return new Decimal128(source);
            }
        },

        new Converter<Decimal128, BigDecimal>() {

            @Override
            public BigDecimal convert(@NonNull Decimal128 source) {
                return source.bigDecimalValue();
            }

        }


    ));

}
Run Code Online (Sandbox Code Playgroud)

实际上自Spring Data 2.0.7.RELEASE以上更改如下:

@Bean
public MongoCustomConversions mongoCustomConversions() {
    return new MongoCustomConversions(Arrays.asList(
        new BigDecimalDecimal128Converter(),
        new Decimal128BigDecimalConverter()
    ));

}

@WritingConverter
private static class BigDecimalDecimal128Converter implements Converter<BigDecimal, Decimal128> {

    @Override
    public Decimal128 convert(@NonNull BigDecimal source) {
        return new Decimal128(source);
    }
}

@ReadingConverter
private static class Decimal128BigDecimalConverter implements Converter<Decimal128, BigDecimal> {

    @Override
    public BigDecimal convert(@NonNull Decimal128 source) {
        return source.bigDecimalValue();
    }

}
Run Code Online (Sandbox Code Playgroud)