Формат времени в мангуста Схема Объект - PullRequest
4 голосов
/ 02 июня 2019

У меня есть объект схемы, как показано ниже

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

, и когда я пытаюсь разместить данные в почтальоне как

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

Я получаю следующую ошибку

проверка не удалась: schedule.1.time: преобразование в дату не удалось для значения «12:00:00»

, если я определю type как String,все работает нормально.

Я думаю, что я ошибся в определении типа, чтобы принять время.Может ли кто-нибудь, пожалуйста, помогите мне лучше определить тип объекта

Ответы [ 4 ]

2 голосов
/ 11 июня 2019

У меня к вам простой вопрос, хотите ли вы сохранить только время (без компонента даты, например. 18: 00: 00 ) или как отметка времени (дата и время, например, 2019-06-11T06: 24: 46,642Z )?

Если это просто время, то, к сожалению, вы не можете сохранить его в date типизированном поле, поскольку оно принимает либо дату, либо временную метку, тогда как тип string может принимать любую произвольную строку.

Я бы либо предложил сохранить 18:00:00 как string, а затем обработать так, как вы хотите после извлечения, либо сохранить timestamp с полем, набранным как date, и использовать его вместе с соответствующей датой.

ПростоЧтобы объяснить ошибку, это происходит потому, что 18:00:00 не является допустимым способом представления даты, поскольку в поле введена дата.

0 голосов
/ 13 июня 2019

Можно создать собственный тип и время хранения. Но я предлагаю вам хранить время в виде строки. В этом случае строку легко анализировать, поддерживать и извлекать.

Добавьте пользовательскую проверку следующим образом.

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']
  }
0 голосов
/ 12 июня 2019

Посмотрите сообщение, которое оно говорит

время: приведение к дате не удалось для значения

Время и дата - разные вещи

Если вам нужно использовать время и для следующих работ

{ 
    "time":"2019-06-12T13:34:00.000"
}
0 голосов
/ 02 июня 2019

Как вы заметили, тип поля, которое вы определили, не соответствует данным, которые вы хотите сохранить в нем. Если вы определите его как тип: Дата, он будет принимать только действительные даты, а "18:00:00" - нет.

Из того, что я понимаю, вы хотите сделать, я думаю, что лучшим вариантом может быть сохранение действительного объекта даты, даже если вы только собираетесь показывать или редактировать в своем коде время на стороне клиента.

Другой возможностью может быть объявление трех числовых полей в вашей модели: часы, минуты и секунды.

EDIT:

Чтобы сохранить только то время, которое вы запрашиваете, модель может выглядеть следующим образом:

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;
}
...