在猫鼬中对嵌套数组进行排序

Posted

技术标签:

【中文标题】在猫鼬中对嵌套数组进行排序【英文标题】: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
)

【问题讨论】:

【参考方案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,关于“无法对数组进行排序”,这就是它不起作用的原因吗? ***.com/questions/32191086/…

以上是关于在猫鼬中对嵌套数组进行排序的主要内容,如果未能解决你的问题,请参考以下文章

如何在猫鼬中更新嵌套数组值

如何仅在猫鼬中使用聚合填充嵌套在对象数组中的字段?

如何使用聚合在猫鼬中对文档数组进行分页?

在猫鼬中填充嵌套模型

在猫鼬中填充嵌套模型

在猫鼬中发布嵌套模型