在排序的猫鼬嵌套数组 [英] Sort an nested array in mongoose

查看:104
本文介绍了在排序的猫鼬嵌套数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个数组或一个的音乐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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆