在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 });