当前位置:   article > 正文

数字能排序字符串不能排序_解决mongoDB BigDecimal字符串数值不能直接排序的问题...

字符串不能排序

今天在做金额排序的时候,发现mongoDB自带的sort排序,无法支持BigDecimal排序。

一般情况下,我们都是用自带的sort来排序,但是我发现,对于这种BigDecimal类型,它是无法直接排序的。追朔根本原因,是由于该机制是按照字符串来解析,会按照第一个数字大小来排序,所以它会认为90比700还要大。

比如:db.getCollection(集合名称).find({}).sort({"realTimeConsume":-1});

查询出来的结果如下:

7f6fb22b3d07969718e7feceb7bb5350.png

很明显,这种默认排序是达不到我们的要求的。

下面说下我的解决方案,希望可以帮到大家!

1.对于MongoDB查询语句

重新设置默认的collation属性.collation({"locale": "zh", numericOrdering:true})再排序。

语句如下:

db.getCollection(集合名称).find({}).collation({"locale": "zh", numericOrdering:true}).sort({"realTimeConsume":-1});

这样排序就按照数值来排序,就OK了。

2b3572e0ee37bb95b687c0a9f6b85f63.png

2,对于程序中代码实现

在条件查询之前,重新设置new Query().collation的值,这样就可以完美的解决了。

  1. Query query = new Query();
  2. Document source = new Document();
  3. source.put("locale", "zh");
  4. source.put("numericOrdering", true);
  5. Collation collation = Collation.from(source);
  6. query.collation(collation);
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/286981
推荐阅读
相关标签
  

闽ICP备14008679号