在mongoose中对嵌套数组进行排序

时间:2014-02-11 23:39:25

标签: javascript arrays node.js mongodb mongoose

我有一个PlaylistShema,有阵列或音乐。 在这一系列音乐中,我有一个ObjectId(参与音乐收藏的人),addedAttitle

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

1 个答案:

答案 0 :(得分:5)

您不能直接在Mongoose中对数组进行排序。您可以使用toObjectdocumentation)和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 
});