Как преобразовать отдельные поля месяца / даты / года в дату в Mongoose - PullRequest
0 голосов
/ 21 июня 2019

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

О чем я пытался или думал:

Виртуалы :

Не совсем вариант, так как они не принимают параметры. Мне пришлось бы объединить поля в одно свойство setDate, и тогда я мог бы просто преобразовать их в Date(), где бы я ни делал эту комбинацию.

Крючок для предварительного сохранения :

Поля

Мои dobDay, dobMonth и dobYear недоступны в this, поскольку они не соответствуют полям в документе.

Метод экземпляра :

UserSchema.methods.formatDob = function (day, month, year) {
  let dob = new Date( parseInt(year), parseInt(month) - 1, parseInt(day), 0, 0, 0, 0 );
  return new Date(dob, '<YYYY-MM-DD>');
}

Это будет работать концептуально для моего маршрута редактирования, но не для моего маршрута создания.

exports.register = async function(req, res, next) {  
  try {
    // instance methods not available yet
    let user = db.User.create(req.body);
    // method now available but too late to modify before inserting

В этом случае, если я захочу вызвать метод экземпляра и сгенерировать отформатированную дату рождения, мне нужно будет позвонить user.save(), что является ненужной поездкой в ​​базу данных.

Обновление пользователя вручную

const { dobYear, dobMonth, dobDay } = req.body;
const dob = formatDob(dobDay, dobMonth, dobYear);
user = new db.User(); // can't pass in req.body here
// Now I have to manually set all the fields!
...
user.dob = dob;
user.save();

Поскольку я не могу передать req.body в новый db.User(), как я могу с db.User.create(), я должен добавить поля вручную. Там должен быть лучший путь. Как другие люди делают это?

...