我有两个带有 Mongoose 的架构(AgendaCompromissoSchema
和 profissionaisSchema
)。
我想找到一组按 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' );
最佳答案
使用$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 或更高版本。
关于node.js - Mongoose,根据外键/填充键排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44331221/