Ошибка проекции Mongoose при запросе базовой коллекции с определенным дискриминатором - PullRequest
0 голосов
/ 17 мая 2019

Я определил схему User в user.js

let mongoose = require('mongoose');
let Schema = mongoose.Schema;
let UserSchema = new Schema({
    first_name: { type: String, required: false },
    last_name: { type: String, required: false },
    email: { type: String, required: true, unique: false  },
    password: { type: String, required: true  },
    role: { type: String, required: false },
    image: { type: Buffer, required: false },
    mfa_enabled: { type: Boolean, required: false },
    mfa_secret: { type:  String, required: false },
    mfa_skip:  { type: Boolean, required: false },
    user_groups: { type:  [String], required: false },
    login_attempts: { type: [Number], required: false }
});

module.exports = mongoose.model('User', UserSchema);

У него есть дискриминатор, пациент, определенный в Patient.js:

let mongoose = require('mongoose');
let Schema = mongoose.Schema;
let User = require('./user');
let patientSchema = new Schema({
    age: { type: String },
    verified: { type: Boolean },
    overdue_assessment: { type: Date },
    dob: { type : Date },
    gender: { type : String },
    date_registered: { type: Date },
    last_assessment_score: { type: Number },
    last_assessment_date: { type: Date }
});

module.exports = User.discriminator('Patient', patientSchema);

Я загружаю в модель пациента вконечная точка (Patient.put.js) и попытка обновить пациента.Это работает, как и ожидалось:

let Patient = require('../../models/patient');


Patient.findById(req.tokenData.user_id, function(err, patient) {
 patient.last_assessment_date = new Date();
 patient.save();
});

Я сейчас пытаюсь запросить мою базовую модель User с помощью проекционного запроса, например, так:

User.find(conditions, { password: false }, options, function(err, objects){
 // projection cannot have a mix of inclusion and exclusion.
});

Удаление параметра проекции отменяет ошибку и возвращает обапользователи и пациенты, но я не могу передать конфиденциальные данные на клиентскую сторону ..

User.find(conditions, {}, options, function(err, objects){
 //success
});

Кроме того, удаление require в Patient.put.js позволяет избежать этой ошибки проекта, когда я пытаюсь запросить коллекцию пользователей.Что очень странно для меня.

//let Patient = require('../../models/patient');


Patient.findById(req.tokenData.user_id, function(err, patient) {
 patient.last_assessment_date = new Date();
 patient.save();
});

Я получаю ошибку Мангуста: проекция не может иметь сочетание включения и исключения.Как можно избежать этого, чтобы пользователи и пациенты возвращались из этого запроса, используя проекцию в моем запросе?Почему простая загрузка в Patient через require в несвязанной конечной точке может вызвать эту проблему?

...