猫鼬-FindOne和保存不起作用

时间:2019-02-24 00:09:31

标签: javascript node.js mongodb mongoose

我是expressJsmongoose(包括MongoDB)的新手。 问题是当我尝试通过findOne()来寻找患者时,catch错误显示:

  

model.findOne不起作用。

我从来没有这个错误。 好吧,我的错误代码是:

var Paciente = require('../modelos/Paciente');
var pacienteSchema = Paciente.pacienteSchema;

/**
 * 
 * Metodo para añadir un nuevo paciente
 */
function nuevoPaciente(request, response) {
    var BODY = request.body;
    const rutNuevo = BODY.nuevoPaciente.Rut;
    var pacienteEntrada = new pacienteSchema(BODY.nuevoPaciente);
    try {
        console.log(pacienteEntrada);
        pacienteEntrada.findOne({
            Rut: rutNuevo
        }, (err, pacienteExiste) => {
            console.log(err);
            if (err) {
                console.log(err, pacienteExiste);
                response.status(500).send({
                    msjError: 'Error interno al guardar el paciente',
                    numError: 1,
                    err
                });
            } else if (!pacienteExiste) {
                console.log("El paciente no existe, hay que guardarlo");
                pacienteEntrada.save((err, pacienteSave) => {
                    console.log(err);
                    if (err) {
                        response.status(500).send({
                            msjError: 'Error interno al guardar el paciente',
                            numError: 1,
                            err
                        });
                    } else if (!pacienteSave) {
                        response.status(404).send({
                            msjError: 'No se ha guardado el usuario',
                            numError: 3,
                            err
                        });
                    } else {
                        console.log(pacienteSave);
                        response.status(200).send({
                            msjError: 'El paciente se ha guardado con exito!',
                            numError: 0,

                        });
                    }
                });
            } else {
                console.log("paciente ya registrado");
                response.status(400).send({
                    msjError: 'El paciente ya existe registrado',
                    numError: 2,

                });
            }
        });
    } catch (err) {
        console.log("Problemas");
        console.log(err);

        response.status(500).send({
            msjError: 'Error no existen los parametros necesarios para guardar al nuevo paciente',
            err
        });
    }
}

Paciente的代码是(module.exports):

module.exports = {
  //pacienteSchema: mongoose.model('Paciente', pacienteSchema),
  pacienteSchema: mongoose.model('Paciente', pacienteSchema),
  pacienteFormEnfermeria: pacienteFormEnfermeria,
  pacienteModelFormEnfermeria: pacienteModelFormEnfermeria,
  pacienteFormKinesiologia: pacienteFormKinesiologia,
  pacienteModelFormKinesiologia: pacienteModelFormKinesiologia,
  pacienteModelFormNutricion: pacienteModelFormNutricion,
  pacienteFormNutricion: pacienteFormNutricion,
  pacienteFormModalRegistro: pacienteFormModalRegistro,
  pacienteFormRegistro: pacienteFormRegistro
}

变量pacienteSchema为:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var pacienteSchema = Schema({
      Nombre: String,
      ApellidoPaterno: String,
      ApellidoMaterno: String,
      Rut: String,
      Edad: Number,
      FechaNacimiento: Date,
      genero: String,
      Nacionalidad: String,
      Direccion: String,
      Comuna: String,
      telefonoContacto: String,
      celular: String,
      Prevision: String,
      patologiaConsulta: String,
      creenciasReligiosas: String,
      costumbres: String,
      etnia: String,
      estadoCivil: String,
      grupoFamiliar: String,
      hijos: String,
      redApoyo: String,
      escolaridad: String,
      ocupacion: String,
      horarioLaboral: String,
      diasFaltaTrabajo: Number,
      accidentesLaborales: String,
      riesgosLaborales: String,
      practicasDeportivas: String,
      hobbies: String,
      estadoVivienda: String,
      accesoServiciosBasicos: String,
      antecedentesFamiliares: String});

1 个答案:

答案 0 :(得分:1)

应该为pacienteSchema.findOne,而不是表示文档的实例化pacienteEntrada(如关系DB中的一行)。 pacienteSchema代表对文档集合(如关系数据库中的表)的访问。

顺便说一句,Paciente.pacienteSchema应该被称为Paciente.pacienteModel之类的东西(因为它是mongoose.model返回的值)。

pacienteEntrada.save应该已经可以了,但是您的回调似乎是错误的:我相信它将仅使用一个(错误)参数来调用,因此您的第二个参数(pacienteSave)必须为{{1} }。这会使您的函数发送404并显示为失败。

或者选择这些,或者您将数据库与undefined而不是mongoose.createConnection连接(在这种情况下,您需要直接使用返回的连接而不是mongoose.connect-检查their docthe warning有关在单独的连接上访问模型的信息。