mongoose --- 中文排序问题

  1. sort确实解决了大部分的排序问题,中文排序则是在mongodb3.4版本才支持的,下面上下简单的测试代码,请自行忽略开发环境。
    // js
    // 创建两条user记录
    await ctx.model.User({ username: '哈哈哈哈哈', registerDate: new Date() }).save();
    await ctx.model.User({ username: '啊啊啊啊啊', registerDate: new Date() }).save();
    
    // 按照registerDate升序,结果是 [ { username: '哈哈哈哈哈' }, { username: '啊啊啊啊啊' } ]
    await ctx.model.User.find({}, { username: 1, _id: 0 }).sort({ registerDate: 1 });  // 
    
    // 按照username升序,结果是 [ { username: '哈哈哈哈哈' }, { username: '啊啊啊啊啊' } ]
    await ctx.model.User.find({}, { username: 1, _id: 0 }).sort({ username: 1 });
    
    // 中文排序,按照username升序,结果是 [ { username: '啊啊啊啊啊' }, { username: '哈哈哈哈哈' } ]
    await ctx.model.User.find({}, { username: 1, _id: 0 }).sort({ username: 1 }).collation({ locale: 'zh' });
  1. 从结果上看,sort对中文的字段进行排序确实不行,需要加上.collation({ locale: 'zh' })才支持中文排序。
  2. 总结:不管在一般的查询还是在aggregate聚合中sort的语法都是一样的且不支持中文字段排序,想实现中文字段排序需要加.collation({ locale: 'zh' })
  3. collation的官方文档

猜你喜欢

转载自blog.csdn.net/qq_40140699/article/details/85696722