当我调试问题时,我发现,猫鼬排序无法正常工作。我删除了代码并进行了简单的测试。您可以运行它,看它会失败。
也许有人曾见过它?也许我错过了什么?
谢谢你的帮助!
var mongoose = require('mongoose');
var assert = require('assert');
mongoose.set('debug', true);
mongoose.connect('mongodb://localhost/test');
var CarSchema = new mongoose.Schema({
name: String
});
mongoose.model('Car', CarSchema);
var CarsSchema = new mongoose.Schema({
car: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Car'
},
quantity: Number
});
var OrderSchema = new mongoose.Schema({
suborders: [CarsSchema]
});
mongoose.model('Cars', OrderSchema);
var Car = mongoose.model('Car');
var Cars = mongoose.model('Cars');
Car.create([
{
name: 'Tesla'
},
{
name: 'BMW'
}
], function (err, objs) {
Cars.create({
suborders: [
{
car: objs[1]._id, //BMW
quantity: 1
}, {
car: objs[0]._id, //Tesla
quantity: 2
}
]
}, function (err, order) {
Cars.findById(order._id)
.populate({
path: 'suborders.car',
options: {
sort: '-name'
}
}).exec(function (err, cars) {
assert.equal(cars.suborders[0].car.name, 'Tesla', 'DESC: 0 should be Tesla');
assert.equal(cars.suborders[1].car.name, 'BMW', 'DESC: 1 should be BMW');
assert.equal(cars.suborders[0].quantity, 2, 'DESC: Tesla quantity should be 2');
assert.equal(cars.suborders[1].quantity, 1, 'DESC: BMW quantity should be 1');
});
});
});
答案 0 :(得分:1)
遗憾的是,您无法对mongooose / mongodb中的填充字段进行排序。事实上,人口稠密的土地几乎存在,通过猫鼬成为可能。但它们并不存在于实际数据库中(因为mongo不支持连接),这就是实际应用排序的地方。
因此,您必须使用javascript内置函数Array.sort(compare)或任何您首选的必需模块手动对结果数组进行排序。
答案 1 :(得分:1)
这是一个确认的猫鼬虫here,并说不容易修复。 :(
关键现象是前两个断言通过,然后在第三个断言中失败。
也许您可以更改架构设计或搜索类似于“mongoose子文档排序”的内容。 Here是应用aggregate
的示例。
答案 2 :(得分:0)
我认为它可能对你有帮助,因为在mongoose populate选项中 提供正确的排序顺序
Cars.findById(order._id)
.populate({
path: 'suborders.car',
options: {
sort: {name:-1}
}
}).exec(function (err, cars) {
});