我有一个PlaylistShema,有阵列或音乐。
在这一系列音乐中,我有一个ObjectId
(参与音乐收藏的人),addedAt
和title
。
PlaylistShema
var PlaylistSchema = new Schema({
title: {type : String, default : '', trim : true},
user: {type : Schema.ObjectId, ref : 'User'},
musics : [{
musicId : {type : Schema.ObjectId , ref : 'Music'},
title : {type : String},
addedAt : {type : Date, default : Date.now}
}],
tags : { type : [], get : getTags, set : setTags},
createdAt : {type : Date, default : Date.now}
})
我有一个静态加载播放列表:
加载功能
load: function (id, cb) {
this.findOne({ _id : id })
.populate('user', 'name email username')
.populate('musics.musicId')
.exec(cb)
}
我希望按addedAt
... 对音乐进行排序
但我不能.populate('musics.musicId', { sort: { 'addedAt': 'desc' } })
,因为这不是addedAt
...
当涉及嵌套数组时,我对填充感到非常困惑......
谢谢!
MusicShema
var MusicSchema = new Schema({
title: {type : String, default : '', trim : true}
})
答案 0 :(得分:5)
您不能直接在Mongoose中对数组进行排序。您可以使用toObject
(documentation)和Array
sort
方法克隆数据并将其排序为JavaScript对象:
Playlist.load(function(err, playList) {
var pl = playList.toObject();
pl.musics.sort(function(m1, m2) { return m1.addedAt - m2.addedAt; });
// pl contains the playlist now
});