moment(new Date()。toISOString()始终返回相同的日期和时间

时间:2017-11-23 03:12:24

标签: node.js mongodb insert timestamp

我试图在mongoose模型中使用moment(new Date()。toISOString() 如下图所示

var mongoose = require('mongoose');
var uniqueValidator = require('mongoose-unique-validator');
  Schema = mongoose.Schema;


var moment = require('moment');

//  https://www.npmjs.com/package/mongoose-unique-validator
var categorySchema = new mongoose.Schema(
  {
      CatId:{ type: Number, required: true, unique: true },
      Name : { type: String, required: true, unique: true },
      Description : String,
      Is_Active:Number,
      Db_Created_TimeStamp:{type:Date,default: moment(new Date().toISOString())},
      Db_Updated_TimeStamp:{type:Date,default:moment(new Date().toISOString())},
  },{collection: "Categories"})
categorySchema.plugin(uniqueValidator);
mongoose.model('Categories',categorySchema);

当数据插入mongodb时,它总是显示相同的时间

不确定我是否遗漏了一些东西

这样做的想法是获得包含毫秒的时间戳

{ 
    "_id" : ObjectId("5a163a14ed910b1279d7ca3f"), 
    "Is_Active" : NumberInt(1), 
    "Description" : "spo22rt", 
    "Name" : "spo22rt", 
    "CatId" : NumberInt(2), 
    "Db_Updated_TimeStamp" : ***ISODate("2017-11-23T03:01:25.349+0000"), 
    "Db_Created_TimeStamp" : ISODate("2017-11-23T03:01:25.346+0000"),*** 
    "__v" : NumberInt(0)
}
{ 
    "_id" : ObjectId("5a163a2ced910b1279d7ca40"), 
    "Is_Active" : NumberInt(1), 
    "Description" : "spossss22rt", 
    "Name" : "spo22rsst", 
    "CatId" : NumberInt(1), 
    "Db_Updated_TimeStamp" : **ISODate("2017-11-23T03:01:25.349+0000"), 
    "Db_Created_TimeStamp" : ISODate("2017-11-23T03:01:25.346+0000"), 
    "__v" : NumberInt(0)**
}

这里我插入的第一条记录有时间2017-11-23T03:01:25.349 + 0000

3分钟后,我插入了第二条记录,但仍然在db

中同时插入

2017-11-23T03:01:25.349 + 0000

我正在上午8:40尝试插入 但我不确定那时是什么时候03:01:25

我遗漏了一些基础知识我认为差不多花了一天时间来理解,但没有任何线索可以理解发生的事情请帮助我理解这个

2 个答案:

答案 0 :(得分:0)

default设置为某个值时,该值将在应用启动时设置,并且首先require架构。在这种情况下,默认值在应用启动时变为new Date().toISOString()的值。

default设置为一个函数,因此该函数运行并在创建新模型实例时返回当前日期。

  Db_Created_TimeStamp: {
    type: Date,
    default: ()=> new Date().toISOString()
  },
  Db_Updated_TimeStamp: {
    type: Date,
    default: ()=> new Date().toISOString()
  },

Mongoose确实使用timestamps option提供“免费”字段:

var thingSchema = new Schema({..}, { timestamps: { createdAt: 'created_at' } });
var Thing = mongoose.model('Thing', thingSchema);
var thing = new Thing();
thing.save(); // `created_at` & `updatedAt` will be included

答案 1 :(得分:0)

或者,您可以使用:

default: new Date().toISOString

不调用该函数,它与:

default: ()=> new Date().toISOString()