Mongo DBsorting不区分大小写
我想从mongodb中得到一个分类的名字。我通过下面的方法完成了这个
query.sort().on("name", Order.ASCENDING)
与此查询执行,我能够findsorting的结果,区分大小写。 但我只是想获得结果的情况下忽略的forms。 怎么做? 请引导我通过这个。
我正在研究Java代码。 所以请用适当的方法给我build议。
更新:这个答案已经过时,3.4会有大小写不敏感的索引。 请查看JIRA获取更多信息https://jira.mongodb.org/browse/SERVER-90
不幸的是,MongoDB还没有区分大小写的索引: https : //jira.mongodb.org/browse/SERVER-90 ,任务被推回。
这意味着目前sorting不区分大小写的唯一方法是实际创build一个特定的“下方”字段,复制有问题的sorting字段的值(当然是下方),然后对其进行sorting。
sorting在MongoDB中的工作方式与此类似,但您可以使用聚合方式实时执行此操作:
采取以下数据:
{ "field" : "BBB" } { "field" : "aaa" } { "field" : "AAA" }
所以有如下的说法:
db.collection.aggregate([ { "$project": { "field": 1, "insensitive": { "$toLower": "$field" } }}, { "$sort": { "insensitive": 1 } } ])
会产生如下结果:
{ "field" : "aaa", "insensitive" : "aaa" }, { "field" : "AAA", "insensitive" : "aaa" }, { "field" : "BBB", "insensitive" : "bbb" }
插入的实际顺序将保持在转换时导致相同键的任何值。
这在MongoDB JIRA上已经有相当长的一段时间了,但现在已经解决了。 请阅读本发行说明以获取详细的文档 。 你应该使用collation
。
User.find() .collation({locale: "en" }) //or whatever collation you want .sort({name:'asc'}) .exec(function(err, users) { // use your case insensitive sorted results });
这是在Java中。 我混合了无参数和BasicDBObject
第一个key-val变体,以BasicDBObject
不同的情况
DBCollection coll = db.getCollection("foo"); List<DBObject> pipe = new ArrayList<DBObject>(); DBObject prjflds = new BasicDBObject(); prjflds.put("field", 1); prjflds.put("insensitive", new BasicDBObject("$toLower", "$field")); DBObject project = new BasicDBObject(); project.put("$project", prjflds); pipe.add(project); DBObject sort = new BasicDBObject(); sort.put("$sort", new BasicDBObject("insensitive", 1)); pipe.add(sort); AggregationOutput agg = coll.aggregate(pipe); for (DBObject result : agg.results()) { System.out.println(result); }
我们用JavaScript数组中的.sort函数来解决这个问题
这是代码
函数foo(){ let results = collections.find({ _id:_id },{ 字段:{ '用户名':1, } })。取(); results.sort((a,b)=> { var nameA = a.username.toUpperCase(); var nameB = b.username.toUpperCase(); if(nameA nameB){ 返回1; } 返回0; }); 返回结果; }