赞
踩
今天在做字符串类型的数值排序的时候,发现mongoDB自带的sort排序,无法支持BigDecimal排序。
一般情况下,我们都是用自带的sort来排序,但是我发现,对于这种字符串数值类型,它是无法直接排序的。追朔根本原因,是由于该机制是按照字符串来解析,会按照第一个数字大小来排序,所以它会认为90比700还要大。
比如:
db.getCollection(集合名称).find({}).sort({"realTimeConsume":-1});
1.对于MongoDB查询语句
重新设置默认的collation属性.collation({"locale": "zh", numericOrdering:true})再排序。
db.getCollection(集合名称).find({}).collation({"locale": "zh", numericOrdering:true}).sort({"realTimeConsume":-1});
2,对于程序中代码实现
在条件查询之前,重新设置new Query().collation的值,这样就可以完美的解决了。
- Query query = new Query();
- Document source = new Document();
- source.put("locale", "zh");
- source.put("numericOrdering", true);
- Collation collation = Collation.from(source);
- query.collation(collation);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。