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

Posted

技术标签:

【中文标题】当前日期与特定日期相同时如何自动更新字段【英文标题】:How to auto update a field when current date is the same than a specific date 【发布时间】:2018-01-26 08:14:18 【问题描述】:

我正在做一个项目,我的网站展示活动信息和日期,例如示例 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),它如何自动更新为参加由用户输入。

【问题讨论】:

您可能想分享一些(事实上很多)关于您的具体案例的更多信息。示例数据、示例查询、精确问题或任何让我们更清楚您的问题的内容。 使用另一个字段的值更新 MongoDB 字段这就是我基本上想要做的,当当前日期“更高”时,我希望状态更改表单中的放置日期 我仍然不太确定我是否理解。你可能和这里的这个人有同样的问题吗? ***.com/questions/3974985/… 有点,但不是真的。我的意思是::我有这个表单,其中有很多字段,其中一个是 status (它需要 2 个值:Waiting 和 Attended),另一个是 date,表单中的所有数据都使用 mongoose 发送到 mongoDB。我想做的是,对于数据库中的日期,我想找到一种方法,当当前 PC 日期 >= 比数据库中的日期时,状态字段的值会自动从等待更改为已参加。这就是我想做的,我不知道该怎么做。我希望你现在能理解我 【参考方案1】:

这不能使用单个标准更新命令来完成(另请参阅here 和here)。

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

您首先加载现有实体,然后更新 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');

我个人建议您采用第二种方法。

【讨论】:

感谢您的回答,先生,一定会尝试的!我的理解是我将Paciente.findOneAndUpdate(_id: req.params.id, fecha: $lt: Date(), $set: estado: 'attended'); Insine 我的更新功能 这有效,但不如预期。这应该就像一直在听服务器一样,所以当我打印出患者列表时,状态(estado)字段应该已经自动更新,而无需编辑患者 使用 MongoDB 无法做到这一点。当然,您可以使用投影从数据库中检索 estado 的不同值,无论实际存储的是什么。在这种情况下,我建议您甚至不要存储 estado,因为它看起来更像是一个计算值,而不是需要存储的东西......? 我就是这么想的。还是谢谢你帮助我!这不完全是解决方案,但它的工作方式与预期不同

以上是关于当前日期与特定日期相同时如何自动更新字段的主要内容,如果未能解决你的问题,请参考以下文章

MySQL数据类型 - 日期和时间类型

手机时间怎么设置?

根据今天每天自动更新的日期计算工人总数

如何使用当前日期更新访问日期/时间字段

手机时间怎么修改?

django:DateTimeField如何自动设置为当前时间并且能被修改 ——django日期时间字段的使用