【问题标题】:Mongoose: unable to update date typed documentMongoose:无法更新日期类型的文档
【发布时间】:2015-11-25 13:24:48
【问题描述】:

我想将日期类型的文档更新为当前日期。 我的架构是

var appEventActivity = mongoose.Schema({
                    app_key : String,
                    e_id:String,//event id from appEvent
                    u_imei:String,//user imei from appUsers
                    startAt:{type: Date, default : Date.now()},
                    endAt:{type: Date, default : Date.now()}
                });

我更新的部分代码是

AppEventActivity.findOneAndUpdate({_id:req.update_event_id},{$currentDate : {endAt:true}}, function(err,data){
            if(err)console.log(err);
            res.send(data);

        });

我见过 add created_at and updated_at fields to mongoose schemasHow do I update a property with the current date in a Mongoose schema on every save? 但没有成功。

【问题讨论】:

    标签: node.js mongodb mongoose mongodb-query


    【解决方案1】:

    我在这里看到的唯一问题是省略了{ "new": true },以便返回修改后的文档:

    AppEventActivity.findOneAndUpdate(
       { "_id": req.update_event_id },
       { "$currentDate" : { "endAt": true} },
       { "new": true },
       function(err,data){
          if(err)console.log(err);
          res.send(data);
      });
    

    没有{ "new": true },返回的文档是更新“之前”的“未修改”版本。设置它会显示您刚刚执行的更新。

    这是与 MongoDB 驱动程序默认行为一致的遗留模式。

    MongoDB 的 $currentDate 运算符按预期工作。这是一个完整的清单:

    var async = require('async'),
        mongoose = require('mongoose')
        Schema = mongoose.Schema;
    
    mongoose.connect('mongodb://localhost/test');
    
    var testSchema = new Schema({
      "name": String,
      "date": { type: Date, default: Date.now }
    });
    
    var Test = mongoose.model( 'Test', testSchema, 'test' );
    
    async.series(
      [
        function(callback) {
          Test.remove({},callback);
        },
        function(callback) {
          Test.findOneAndUpdate(
            { "name": "me" },
            { "$currentDate": { "date": true } },
            { "new": true, "upsert": true  },
            function(err,doc) {
              console.log(doc);
              callback(err);
            }
          );
        }
      ],
      function(err) {
        if (err) throw err;
        mongoose.disconnect();
      }
    );
    

    输出:

    { _id: 55e45ba528f7d03a06a2dd6e,
      name: 'me',
      __v: 0,
      date: Mon Aug 31 2015 23:50:29 GMT+1000 (AEST) }
    

    因此,在服务器操作上设置了一个新日期,而不是在客户端上,这就是您所追求的。

    【讨论】:

      猜你喜欢
      • 2018-10-09
      • 2015-11-08
      • 1970-01-01
      • 1970-01-01
      • 2015-07-10
      • 2015-10-13
      • 2021-04-08
      • 1970-01-01
      • 2020-07-09
      相关资源
      最近更新 更多