2017-06-02 14 views
1

私はマングースと2つのスキーマ(AgendaCompromissoSchemaprofissionaisSchema)を持っています。マングース、外来/人口キーに基づいてソート

私はすべてAgendaCompromissoのセットを検索したいと思います。profissional.name降順で並べ替えます。

ネストされたドキュメントの代わりに別のスキーマを使用したいと考えています。

私は成功せず次のコードを試しました。

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'); 

答えて

1

凝集パイプラインにおける(SQLと同様、外部結合左行う)$lookupを使用すると、この解決することができる:

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以上が必要です。

+0

ありがとうございました。それは私の問題を解決する。 –

関連する問題