在排序的猫鼬嵌套数组 [英] Sort an nested array in mongoose
问题描述
我有一个数组或一个的音乐PlaylistShema。
在这个阵列的音乐中我有一个的ObjectId
(谁REF到音乐集合),一个 addedAt
和标题
。
PlaylistShema
VAR PlaylistSchema =新模式({
标题:{类型:字符串,默认:'',修剪:真正},
用户:{类型:Schema.ObjectId,参考:用户}, 的音乐:[{
MusicID提供:{类型:Schema.ObjectId,REF:音乐},
标题:{类型:字符串},
addedAt:{类型:日期,默认:Date.now}
}], 标签:{类型:[],得到:getTags,设置:setTags},
createdAt:{类型:日期,默认:Date.now}
})
我有一个静态加载播放列表:
加载功能
载:函数(ID,CB){
this.findOne({_id:ID})
.populate('用户','名电子邮件用户名')
.populate('musics.musicId')
.exec(CB)
}
我想通过 addedAt
...我的音乐分类
但我不能做 .populate('musics.musicId',{排序:{'addedAt':'递减'}})
,因为这不是其中 addedAt
是...
我很困惑与填充,当涉及到嵌套数组...
谢谢!
MusicShema
VAR MusicSchema =新模式({
标题:{类型:字符串,默认:'',修剪:真正}
})
您不能阵列直接在猫鼬进行排序。您可以克隆的数据,并使用它作为排序JavaScript对象 toObject
(文档)和阵列
排序
方法:
Playlist.load(函数(ERR,播放列表){
VAR PL = playList.toObject();
pl.musics.sort(功能(M1,M2){返回m1.addedAt - m2.addedAt;});
// PL包含的播放列表现在
});
i have a PlaylistShema with an array or musics.
In this array of musics I have an ObjectId
(who ref to a Music collection), an addedAt
and a 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}
})
i have a statics to load a playlist :
Load function
load: function (id, cb) {
this.findOne({ _id : id })
.populate('user', 'name email username')
.populate('musics.musicId')
.exec(cb)
}
i want to sort my musics by addedAt
...
but i can't do .populate('musics.musicId', { sort: { 'addedAt': 'desc' } })
because this is not where addedAt
is...
i'm very confused with populate when it comes to nested array...
thanks !
MusicShema
var MusicSchema = new Schema({
title: {type : String, default : '', trim : true}
})
You can't sort an array directly in Mongoose. You can clone the data and sort it as a JavaScript object by using toObject
(documentation) and the Array
sort
method:
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
});
这篇关于在排序的猫鼬嵌套数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!