猫鼬模式对象中的时间格式

Time format in mongoose scheema Object

我有如下模式对象

 schedule: [{
        time: {
            type: Date,
            required: true
        }
    }]

当我尝试将 post 中的数据 post 作为

"schedule":[
      {
         "time":"18:00:00"
      }]

我遇到以下错误

validation failed: schedule.1.time: Cast to Date failed for value "12:00:00"

如果我将 type 定义为 String,一切正常。

我认为我定义接受时间的类型是错误的。谁能帮我更好地定义对象类型

如您所见,您定义的字段类型与您要在其中存储的数据不匹配。如果您将其定义为类型:日期,它将只接受有效日期,而“18:00:00”则不是。

根据我的理解,你想做的是,我认为最好的选择可能是存储一个有效的日期对象,即使你只打算在你的代码中显示或编辑客户端的时间。

另一种可能是在您的模型中声明三个数字字段:小时、分钟和秒。

编辑:

要仅存储您要求的时间,模型可能如下所示:

schedule: [{
    hours: {
        type: Number, required: true, min: 0, max: 23
    },
    minutes: {
        type: Number, required: true, min: 0, max: 59
    },
    seconds: {
        type: Number, required: true, min: 0, max: 59
    }
}]

我不知道你打算如何处理这些数据,但你可以得到一个像你试图用这样的函数存储的字符串:

function timeToString(h, m, s) {
    if (h < 10) h = '0' + h;
    if (m < 10) h = '0' + h;
    if (s < 10) h = '0' + h;
    return h + ':' + m + ':' + s;
}

我有一个简单的问题要问你,你想只存储 时间(没有日期部分,例如 18:00:00) 或作为 时间戳 (日期和时间,例如 2019-06-11T06:24:46.642Z)?

如果只是时间,那么不幸的是你不能将它存储在 date 类型字段中,因为它接受日期或时间戳,而 string 类型可以接受任意字符串。

我建议将 18:00:00 存储为 string,然后在检索后以您想要的方式进行处理,或者存储字段类型为 datetimestamp 并使用它及其相应的日期。

只是为了解释错误,这是因为 18:00:00 不是表示日期的有效方式,因为该字段是日期类型。

看看它告诉的消息

time: Cast to Date failed for value

时间和日期是不同的东西

如果你需要用到下面作品的时间也一样

{ 
    "time":"2019-06-12T13:34:00.000"
}

可以创建自定义类型和存储时间。但我建议您将时间存储为字符串。在这种情况下,字符串很容易解析、维护和检索。

像这样添加自定义验证。

time: {
    type: String,
    validate: {
      isAsync: true,
      validator: function(v, cb) {
        setTimeout(function() {
          var timeRegex = /^(?:2[0-3]|[01][0-9]):[0-5][0-9]:[0-5][0-9]$/;
          var msg = v + ' is not a valid time format!';

          cb(timeRegex.test(v), msg);
        }, 5);
      },

      message: 'Default error message'
    },
    required: [true, 'Time is required']
  }