mongoose,根据外国/填充的钥匙sorting

我有两个模式( AgendaCompromissoSchemaprofissionaisSchema )与mongoose。

我想find所有按照profissional.name降序排列的所有AgendaCompromisso

我更喜欢单独的模式,而不是嵌套的文档。

我已经尝试了下一个代码没有成功。

  router.get('/',function(req,res,next){ AgendaCompromisso.find({}) .populate('profissional',name') //here I´d like the results sorted by 'name' descending .sort:{ 'profissional.name': -1 //Sort by name Added DESC } .exec( (err,data) => { callback(err,data,res) }) }); 

//路由器

 const express = require('express'); const router = express.Router(); const AgendaCompromisso = require('../models/agendaCompromisso'); const callback=function(err,data,res){ //console.log(data); if (err) return res.status(500).json(err); return res.status(200).send(data); } //get all router.get('/',function(req,res,next){ AgendaCompromisso.find({}) .populate('profissional','name') .exec( (err,data) => { callback(err,data,res) }) }); 

//模式

 var AgendaCompromissoSchema = new mongoose.Schema({ profissional:{type:mongoose.Schema.Types.ObjectId, ref:'Profissional'}, title:{type:String}, slot_dateInit:{type: Date}, slot_timeInit:{type: Date} }); module.exports = mongoose.model('AgendaCompromisso', AgendaCompromissoSchema,'agendasCompromissos' ); var profissionaisSchema = new mongoose.Schema({ name: {type: String, unique:true}, cpf: {type: String}, }); module.exports = mongoose.model('Profissional', profissionaisSchema,'profissionais' ); 

在汇总pipe道中使用$ lookup (执行左外连接,类似于sql)可以解决这个问题:

 router.get('/',function(req,res,next){ AgendaCompromisso.aggregate([ { $lookup: { from: "profissionais", //use the name of database collection not mongoose model localField: "profissional", foreignField: "_id", as: "profissional_doc" } }, { $unwind: "$profissional_doc" //remove array }, { $sort: {"profissional_doc": -1} // or {"profissional_doc": 1} for ascending } ]) .exec( (err,data) => { callback(err,data,res) }) }); 

只是一个说明,查找您需要mongodb版本3.2或更高版本。