【问题标题】:Sort an nested array in mongoose在猫鼬中对嵌套数组进行排序
【发布时间】:2014-03-10 01:11:57
【问题描述】:

我有一个带有数组或音乐的 PlaylistShema。 在这一系列音乐中,我有一个ObjectId(参考音乐收藏)、一个addedAt 和一个title

播放列表Shema

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

【问题讨论】:

    标签: javascript arrays node.js mongodb mongoose


    【解决方案1】:

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

    【讨论】:

    • 嗯,好吧!这就是为什么 !谢谢
    • 嗨,我有一个类似的模型。当我填充我的“音乐”字段时,我无法获得参考记录的“名称”或“描述”。我该怎么做?
    • 你应该问一个新问题。
    • @WiredPrairie,关于“无法对数组进行排序”,这就是它不起作用的原因吗? stackoverflow.com/questions/32191086/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 2013-10-26
    • 1970-01-01
    • 2019-06-19
    • 2018-10-30
    • 2020-02-06
    相关资源
    最近更新 更多