tot*_*oob 8 javascript mongoose mongoose-populate mongoose-schema
我有一个非常简单的mongo方案,我正在用猫鼬访问
我可以使用populate将用户名和名字映射到每个通知的字段,问题是我似乎无法在日期字段上进行任何排序
使用此代码我得到一个错误
MongooseError:无法在路径notification.from上填充sort,因为它是文档数组的子属性
是否有可能以不同的方式或更新的方式(深度填充,虚拟)这样做?我在使用Mongoose 5.
我宁愿不使用vanilla javascript来对对象进行排序或创建单独的模式
var UserSchema = new Schema({
username: String,
firstname: String,
notifications: [
{
from: { type: Schema.Types.ObjectId, ref: 'User'},
date: Date,
desc: String
}
]
});
app.get('/notifications', function(req, res) {
User.findOne({ _id: req._id }, 'notifications')
.populate({
path: 'notifications.from',
populate: {
path: 'from',
model: 'User',
options: { sort: { 'notifications.date': -1 } }
}
})
.exec(function(err, user) {
if (err) console.log(err)
})
});
Run Code Online (Sandbox Code Playgroud)
关于Mongo,这个可能重复的事实差不多已经有两年了.我问是否有更新或不同的方式在Mongoose中这样做,因为自2016年以来它已经改变了一些新的功能.
来自 Mongoose V5.0.12 常见问题解答:http://mongoosejs.com/docs/faq.html#populate_sort_order
问:我正在数组下填充嵌套属性,如下代码所示:
new Schema({ arr: [{ child: { ref: 'OtherModel', type: Schema.Types.ObjectId } }] });
.populate({ path: 'arr.child', options: { sort: 'name' } }) 不会按 arr.child.name 排序?
答:请参阅此 GitHub 问题。这是一个已知问题,但修复起来非常困难。
所以不幸的是,目前这是不可能的,
实现此目的的一种方法是简单地使用 的javascript本机sort在获取后对通知进行排序。
.exec(function(err, user) {
if (err) console.log(err)
user.notifications.sort(function(a, b){
return new Date(b.date) - new Date(a.date);
});
})
Run Code Online (Sandbox Code Playgroud)