在使用mongoose排序时考虑字符集



通过猫鼬方法排序数据时,我得到了奇怪的结果。我们有以下数据:

[
{ firstName: 'Andy' },
{ firstName: 'Łukasz' },
{ firstName: 'Jack' },
{ firstName: 'Zygmunt' },
]

当使用asc排序时,结果是:

[
{ firstName: 'Andy' },
{ firstName: 'Jack' },
{ firstName: 'Zygmunt' },
{ firstName: 'Łukasz' },
]

当使用desc排序时,结果是:

[
{ firstName: 'Łukasz' },
{ firstName: 'Zygmunt' },
{ firstName: 'Jack' },
{ firstName: 'Andy' },
]

执行代码:

const users = await User.find({})
.sort({
firstName: 'asc',
})
.catch((err) => next(err));

模式代码:

const mongoose = require("mongoose");
const Schema = mongoose.Schema;
const schema = new Schema({
...
firstName: { type: String, required: true },
...
});
schema.set("toJSON", { virtuals: true });
module.exports = mongoose.model("User", schema);

mongoose连接设置:

const mongoose = require("mongoose");
mongoose.connect(config.connectionString, {
useCreateIndex: true,
useNewUrlParser: true,
useUnifiedTopology: true,
useFindAndModify: false,
});
mongoose.Promise = global.Promise;
module.exports = {
User: require("../models/user"),
};

我对排序的期望是,如果我们应用asc,结果应该是:

[
{ firstName: 'Andy' },
{ firstName: 'Jack' },
{ firstName: 'Łukasz' },
{ firstName: 'Zygmunt' },
]

怎样做才能使它像预期的那样工作?

您可以使用Collation:

设置排序顺序
db.users.find({}, { _id: 0 }).collation({ locale: "pl" }).sort({ firstName: 1 })
{ "firstName" : "Andy" }
{ "firstName" : "Jack" }
{ "firstName" : "Łukasz" }
{ "firstName" : "Zygmunt" }

最新更新