在mongoose中sorting一个嵌套的数组

我有一个PlaylistShemaarrays或音乐。 在这个音乐arrays中,我有一个ObjectId (参考Music集合),一个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} }) 

我有一个静态加载播放列表:

加载function

  load: function (id, cb) { this.findOne({ _id : id }) .populate('user', 'name email username') .populate('musics.musicId') .exec(cb) } 

我想sorting我的音乐通过addedAt但我不能做.populate('musics.musicId', { sort: { 'addedAt': 'desc' } })因为这不是在那里addedAt是…

当涉及到嵌套数组时,我很困惑填充…

谢谢 !

MusicShema

 var MusicSchema = new Schema({ title: {type : String, default : '', trim : true} }) 

你不能直接在Mongoose中sorting数组。 您可以使用toObject ( documentation )和Array sort方法克隆数据并将其sorting为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 });