在猫鼬中对嵌套数组进行排序
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/…以上是关于在猫鼬中对嵌套数组进行排序的主要内容,如果未能解决你的问题,请参考以下文章