我有一个User的模型

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

我想得到所有的用户,按字母username排序.这就是我try 过的

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

然而,这并没有按字母顺序对用户进行排序.如何按字母顺序排序?

EDIT: I got confused because I was expecting a "purely alphabetically" sort from Mongoose, not one where Z > a. Basically, I wanted a sort based on username.toLowerCase().

推荐答案

编辑:根据 comments ,问题的排序结果是toLowerCase(username).MongoDB没有用于复杂排序的内置方法.因此,基本上有两种方法:

  1. usernameLowerCase字段添加到架构中.如果你需要经常这样做,这是更好的 Select .
  2. 使用$toLower operator动态生成usernameLowerCase场的投影.这会带来性能和内存方面的警告,但它可能是更方便的 Select .

原始答案:下面是一个完整的示例,使用问题中的特定代码正确排序.所以肯定还有别的事情发生:

#! /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);
        });
    }
);

Mongodb相关问答推荐

MongoDB 4.4如何使用未知密钥更新dict

MongoDB索引使用

Go mongo-驱动程序测试,FindOne未根据给定的筛选器返回正确结果

Select 筛选聚合中的嵌套字段

MongoDB聚合$group阶段$top与$first在大型数据集上的效率

如何在Mongodb Mongoose Nodejs中提取不等于一组值的字段

如何在 MongoDB 中的集合下查找同一文档

如何使用内部数组中的值更新文档

Golang 无法在 MongoDB 中创建文档

从具有多个数组匹配 MongoDB 的两个集合中采样数据

Mongoose $inc 枚举验证失败

为什么一个 mongodb 副本集需要奇数个投票 node ?

Stripe:必须提供来源或客户

Mongo 重启错误 -- /var/run/mongodb/mongod.pid 存在

我怎样才能更快地scrape

在 Mongo 中存储嵌套类别的最有效方法?

带有部分字符串的mongoose文本搜索

MongoDB 数据库,相当于 SELECT column1, column2 FROM tbl

MongoDB限制内存

如何在第一个文档中恢复 MongoDB ChangeStream 而不仅仅是在我开始收听后更改