mongoose:按字母顺序sorting

我有一个User模型

 var User = mongoose.model('Users', mongoose.Schema({ username: 'string', password: 'string', rights: 'string' }) ); 

我想获取所有的用户,按username字母顺序sorting。 这是我所尝试过的

 User.find({}, null, {sort: {username: 1}}, function (err, users) { res.send(users); }); 

但是,这不会按字母顺序排列用户。 我怎样才能按字母顺序sorting?

编辑 :我很困惑,因为我期待从mongoose“纯粹按字母顺序”sorting,而不是一个Z > a 。 基本上,我想要一个基于username.toLowerCase()的sorting。

编辑:根据评论问题原来是sortingtoLowerCase(username) 。 MongoDB没有内置的复杂sorting方法。 所以基本上有两种方法:

  1. 将一个usernameLowerCase字段添加到架构。 这是更好的select,如果你需要做很多事情。
  2. 使用$toLower运算符 执行投影聚合以dynamic生成usernameLowerCase字段。 这与性能和内存告诫,但它可能是更方便的select。

原来的答案:这是一个完整的例子,使用问题的具体代码正确sorting。 所以一定还有其他的事情要做:

 #! /usr/bin/node var mongoose = require('mongoose'); mongoose.connect('localhost', 'test'); var async = require('async'); var User = mongoose.model('Users', mongoose.Schema({ username: 'string', password: 'string', rights: 'string' }) ); var userList = [ new User({username: 'groucho', password: 'havacigar', rights: 'left'}), new User({username: 'harpo', password: 'beepbeep', rights: 'silent'}), new User({username: 'chico', password: 'aintnosanityclause', rights: 'all'}) ]; async.forEach(userList, function (user, SaveUserDone) { user.save(SaveUserDone); }, function (saveErr) { if (saveErr) { console.log(saveErr); process.exit(1); } User.find({}, null, {sort: {username: 1}}, function (err, users) { if (err) { console.log(err); process.exit(1); } console.log(users); process.exit(0); }); } ); 

这个问题和答案是几年,从我可以告诉现在有一个正确的方法来做到这一点。 为未来的search者提供:

 User.find().collation({locale:'en',strength: 2}).sort({username:1}) .then( (users) =>{ //do your stuff }); 

您也可以在不区分大小写的情况下使用username

 UserSchema.index({username:1}, {collation: { locale: 'en', strength: 2}}); 

strength:1是另一种select – 最好参考文档来决定哪个最适合你。

所有这些的细节, 看这里。