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的官方文档
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值