Populate Only When Conditions Are Met

Viewed 3287

I have a mongodb database and I use mongoose with nodejs.

I need return data from the next query populating "tabela_tuss" only if I have the field "temtussvinculado=true".

Here is what I am doing:

ConvProced.find({'convenioId':new ObjectId(req.params.id)})
        .populate('convenioId')
        .populate({
             path:'procedId',
             populate:{
                 path:'tabela_tuss',
                 match: { 'procedId.temtussvinculado': true}
            }
        })
        .exec( (err,data) => {
           callback(err,data,res)
        })

My problem is that my match with "procedId.temtussvinculado:true" has no effect and "tabela_tuss" is never populated.

What am I doing wrong?

Here is my schemas:

////
var conveniosSchema = new mongoose.Schema({
  nome: {type: String, unique:true},
  ativo: {type: Boolean}
 });
module.exports = mongoose.model('Convenio', conveniosSchema,'convenios' );
////

////
const agProcedimentosSchema = new mongoose.Schema({
  ativo:{type:Boolean},
  temtussvinculado:{type:Boolean},
  tabela_tuss:{type:mongoose.Schema.Types.ObjectId, ref:'Tuss_22'}
});
module.exports = mongoose.model('Ag_procedimento', agProcedimentosSchema,'ag_procedimentos' );
///

////
const tuss_22Schema = new mongoose.Schema({
  codigo: {type: String, unique:true},
  descricao:{type: String},
  tabela:{type: String}
});
module.exports = mongoose.model('Tuss_22', tuss_22Schema,'tuss_22' );
////

//../models/convenioprocedimento
var conveniosProcedsSchema = new mongoose.Schema({
   convenioId:{type:mongoose.Schema.Types.ObjectId, ref:'Convenio'},
   procedId:{type:mongoose.Schema.Types.ObjectId, ref:'Ag_procedimento'},
   valor_particular:{type:Number},
   valor_convenio:{type:Number},
  });

module.exports = mongoose.model('ConvenioProcedimento', conveniosProcedsSchema,'conveniosprocedimentos' );

//my query:

const ConvProced = require('../models/convenioprocedimento');
ConvProced.find({'convenioId':new ObjectId(req.params.id)})
    .populate('convenioId')
    .populate({
         path:'procedId',
         populate:{
             path:'tabela_tuss',
             match: { 'procedId.temtussvinculado': true}
        }
    })
    .exec( (err,data) => {
       callback(err,data,res)
    })
1 Answers
Related