編集:コメントによると、問題はでソートされていることが判明しましたtoLowerCase(username)
。MongoDBには、複雑な並べ替えのための組み込みメソッドがありません。したがって、基本的に2つの方法があります。
usernameLowerCase
スキーマにフィールドを追加します。これを頻繁に行う必要がある場合は、これがより適切なオプションです。
$toLower
演算子を使用して射影を使用して集計を実行し、フィールドを動的に生成しusernameLowerCase
ます。これにはパフォーマンスとメモリに関する警告がありますが、より便利な選択かもしれません。
元の回答:質問の特定のコードを使用して正しく並べ替える完全な例を次に示します。したがって、何か他のことが起こっているに違いありません。
#! /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);
});
}
);