【问题标题】:Mongoose, sort based on foreign/populated keyMongoose,根据外键/填充键排序
【发布时间】:2017-11-04 00:00:35
【问题描述】:

我有两个带有猫鼬的模式(AgendaCompromissoSchemaprofissionaisSchema)。

我想找到一组按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' );

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    在聚合管道中使用$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 或更高版本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-16
      • 1970-01-01
      • 2018-11-30
      • 2022-09-30
      • 1970-01-01
      • 2017-09-19
      相关资源
      最近更新 更多