如何在当前日期与特定日期相同时自动更新字段

时间:2017-08-17 19:05:10

标签: node.js mongodb date express mongoose

我正在做一个项目,我的网站展示了活动信息和日期,例如5sep。但是,我希望自动更新当前日期相同或已超过设置日期时等待参加的集合的字段。 我正在使用mongoDB,nodeJs,mongoose。

架构模型

var mongoose = require("mongoose");
var Schema = mongoose.Schema;
var dateTime = require("node-datetime");

var paciente_schema = new Schema({

nombre: {type: String, required: true},
estado: {type: String, required: true},
fecha: {type: Date, required: true},
edad: {type: String, required: true},
sexo: {type: String, required: true},
direccion: {type: String, required: true},
contacto: {type: String, required: true}

});
module.exports = mongoose.model("Paciente", paciente_schema);

app.js

    var express = require("express");
    var bodyParser = require("body-parser");
    var mongoose = require("mongoose");
    var Paciente = require("./models/pacientes");
    var dateTime = require("node-datetime");


    var app = express();
    mongoose.Promise = global.Promise;
    var mongoDB = mongoose.connect('mongodb://localhost/pacientes', {
    useMongoClient: true
    });


    app.use(bodyParser.json()); //leyendo parámetros de una petición JSON
    app.use(bodyParser.urlencoded({ extended: true }));
    app.use(express.static("client")); //servido de archivos estáticos



    app.get("/app/pacientes", function(req, res){
//find busca todos los datos de la DB
    Paciente.find(function(err, pacientes){
        if(err){
            res.send("Ocurrió error obteniendo los pacientes");
        }else{
            res.send(pacientes);
        }
    });
});


//obteniendo UN paciente
app.get("/app/pacientes/:id", function(req, res){
//método findOne el cual recibe el id del paciente a buscar en la DB
    Paciente.findOne({_id: req.params.id}, function(err, paciente){
        if(err){
            res.send("Ocurrió error obteniendo el paciente deseado");
        }else{
            res.json(paciente);
        }

    });
});



    app.post("/app/pacientes", function(req, res){
//creando paciente con los datos enviados por el user en el cuerpo de la petición
    Paciente.create(req.body, function(err, pacientes){
        if(err){
            res.send("Error al agregar paciente");
        }else{
            res.json(pacientes)
        }

console.log("FECHA USUARIO: " + req.body.fecha); //Mark
console.log(typeof(req.body.fecha));
var fecha2 = fecha2.toDate()
var fecha = new Date();
console.log("FECHA NEW DATE " + fecha);
console.log(typeof(fecha));
if(req.body.fecha === fecha){
    console.log("WWWW");
}


    });
});


//actualizando paciente
app.put("/app/pacientes/:id", function(req, res){
//creamos una variable(actualiza) la cual tomará los atributos a actualizar y se enviará como un query en el método update
    var actualiza = {

        nombre: req.body.nombre,
        estado: req.body.estado,
        fecha: req.body.fecha,
        edad: req.body.edad,
        sexo: req.body.sexo,
        contacto: req.body.contacto

    };
//encontramos un paciente y lo actualizamos, pasamos el query con los atributos actualizados
    Paciente.findOneAndUpdate({_id: req.params.id}, actualiza, function(err, paciente){
        if(err){
            res.send("Ocurrió error actualizando" + err);
        }else{
            res.json(paciente);
        }

    });
});


//borrar paciente
app.delete("/app/pacientes/:id", function(req, res){
//método para encontrar y eliminar un dato en la DB, el _id es el identificador en la DB
    Paciente.findOneAndRemove({_id: req.params.id}, function(err, pacientes){
        if(err){
            res.send("Error al eliminar el paciente");
        }else{
            res.json(pacientes)
        }

    });
});



//app corriendo en puerto 8888
app.listen(8888, function() {
    console.log("App corriendo en 8888");
});

routes.js

//Modulo que engloba los controladores, rutas y demás configuracione
var myApp = angular.module("myApp", ["ngRoute"]);
//Agregamos el módulo ngRoute como una dependencia, hace que la app sea SPA
myApp.config(function($routeProvider){
    //con el módulo ngRoute agregado podemos usar el routeProvider, el cual se usa para configurar diferentes rutas
    //inicio
    $routeProvider
        .when("/", {
            templateUrl: "templates/lista.html",
            controller: "empController"
        })
        //lista de pacientes
        .when("/pacientes", {
            templateUrl: "templates/lista.html",
            controller: "empController"
        })
        //mostrar un paciente en específico
        .when("/pacientes/:id/mostrar", {
            templateUrl: "templates/mostrar.html",
            controller: "empController"

        })
        //crear un paciente
        .when("/pacientes/crear", {
            templateUrl: "templates/crear.html",
            controller: "empController"
        })
        //editar un paciente
        .when("/pacientes/:id/editar", {
            templateUrl: "templates/editar.html",
            controller: "empController"
        });
});

我不知道我是否需要在这里发布更多代码,让我知道它,我很新。抱歉 我只想知道如何更改状态(estado),它通过无线电形式等待或参加2个值,我想知道如果当前日期(fecha)与日期(fecha)匹配,它是如何自动更新为出席的由用户投入。

1 个答案:

答案 0 :(得分:0)

使用单个标准更新命令无法完成此操作(另请参阅herehere)。

但是,您可以通过两种方式解决此问题:

首先加载现有实体,然后用JavaScript更新所有内容并将其发送到MongoDB:

Paciente.findOne({_id: req.params.id}).exec(function (err, p) {
    p.nombre = req.body.nombre;
    p.estado = req.body.estado;
    p.fecha = req.body.fecha;
    p.edad = req.body.edad;
    p.sexo = req.body.sexo;
    p.contacto = req.body.contacto;

    if (p.fecha < Date()) {
        p.estado = "attended";                       
    }

    Paciente.save(p);
});

作为替代方案,您几乎可以保留所拥有的内容,然后使用其他过滤器发送第二个更新查询,如下所示:

// update your document first
Paciente.findByIdAndUpdate(req.params.id, actualiza);

// update estado if fecha is in the past
Paciente.findOneAndUpdate({_id: req.params.id, fecha: {$lt: Date()}}, {$set: {estado: 'attended'}});

我个人建议你选择第二种方法。