$ lookup возвращает все данные - PullRequest
0 голосов
/ 06 марта 2020

У меня следующий сценарий: у меня две коллекции: medicos и clinicas . Medicos связан с клиникой своим ObjectId. Что я хочу, так это чтобы у меня были только клиники, в которых есть лекарства. Итак, у меня есть этот код:

Clinicas.aggregate([
            $group: {
                _id: {
                    nome: "$nome"
                }

            }
        },
        {
            $lookup: {
                from: "medicos",
                localField: "medico.medicoId",
                foreignField: "_id._id",
                as: 'result'
            }
        },

Но что-то не так: он возвращает все лекарства в как: 'result' . Например: у меня есть 4 документа в коллекции Medicos и два документа в коллекции Clinica. В первой клинике 2 медикамента, а во втором - 1, но массив as: 'result' приносит мне все документы медикаментов для коллекции из 2 клиник, как вы можете видеть.

this just have 1 medicos у этого есть 2 медика

модель медик

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const MedicoSchema = new Schema({
  //cod_medico:{type:Integer},
  nome:{
    type: String,
    required: true,
    maxlength: 80  
  },
},
);

module.exports = mongoose.model('medicos', MedicoSchema);

И в базе данных название коллекции также 'medicos'

1 Ответ

0 голосов
/ 06 марта 2020

Ошибка в группе, вы сначала меняете идентификатор, а после этого соединяете данные, используя новый идентификатор. Попробуйте изменить порядок конвейера или убрать групповой этап. Как это:

db.clinica.aggregate([
    {
        $lookup: {
            from: "medicos",
            localField: "medico.medicoId",
            foreignField: "_id",
            as: 'result'
        }
    },

])

...