首页 文章

猫鼬:无法更新日期类型的文档

提问于
浏览
0

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

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?但没有成功 .

1 回答

  • 0

    我在这里看到的唯一问题是遗漏 { "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 } ,则返回的文档是"un-modified"版本"before"更新 . 设置它会显示刚刚执行的更新 .

    这是与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) }
    

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

相关问题