我想将日期类型的文档更新为当前日期。 我的架构是
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 schemas和How do I update a property with the current date in a Mongoose schema on every save?但未获得成功。
答案 0 :(得分: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 }
,则返回的文档是“更新之前”的“未修改”版本。设置它会显示刚刚执行的更新。
这是与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) }
因此,在服务器操作上设置了一个新日期,而不是在客户端上,这就是你所追求的。