Mongodb以不区分大小写的方式排序

时间:2018-08-25 09:12:06

标签: node.js mongodb mongoose

在mongodb作为数据库的nodejs(express)中的一个项目中,我的工作非常努力。当我使用sort()获取所有数据时,它以错误的方式返回数据,因此有办法按我期望的那样正确地设置其格式,如下所示: 如果我们在数据库中有三个记录:

---------------------
id  | Name |  aga
---------------------
1   | atul | 21
---------------------
2   | Bhavik | 22
---------------------
3   | Jay | 25

我现在得到的是:

2,3,1系列数据

我期望的是: 1,2,3

这意味着忽略大小写,而无需添加新列即可进行排序。

3 个答案:

答案 0 :(得分:6)

您需要在此处将locale: "en"db.collection.find({}).collation({ locale: "en" }).sort({ name: 1 }) 一起使用

{ "_id" : 1, "name" : "Bhavik" }
{ "_id" : 2, "name" : "Jay" }
{ "_id" : 3, "name" : "atul" }

对于下面的文件

{ "_id" : 3, "name" : "atul" }
{ "_id" : 1, "name" : "Bhavik" }
{ "_id" : 2, "name" : "Jay" }

您会得到

    IQueryable<Record> records=null;
        try
        {
            records= from m in _context.Record
                           select m;

        }
    catch (NullReferenceException e)
    {
        return Json(JsonConvert.SerializeObject(e.Message, new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Ignore }));
    }
    catch (ArgumentNullException e)
    {
        return Json(JsonConvert.SerializeObject(e.Message, new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Ignore }));
    }
    catch (Exception e)
    {
        return Json(JsonConvert.SerializeObject(e, new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Ignore }));
    }
    return Json(JsonConvert.SerializeObject(records, new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Ignore }));

答案 1 :(得分:0)

您可以直接在find方法的collation: { locale: 'en' }参数中传递options

db.collection.find({ ...query }, {
  sort: ...,
  limit: ...,
  collation: { locale: 'en' }
}

答案 2 :(得分:0)

通过这种默认排序规则创建集合,您可以按不区分大小写的任意属性进行排序。

db.createCollection("collection_name", { collation: { locale: 'en_US', strength: 2 } } )

db.getCollection('collection_name').find({}).sort( { 'property_name': -1 } )

更多信息:https://docs.mongodb.com/manual/core/index-case-insensitive/