#node.js #sequelize.js
#node.js #sequelize.js
Вопрос:
Я использую PostgreSQL и sequelize. У меня есть столбец модели «checkedAt» для хранения нескольких дат. Я хочу иметь возможность сравнивать разные даты из данных столбца.
Проблема заключается в том, что даты хранятся в виде строк, поскольку это не дата, а тип данных JSON.
Вот как я определил модель
const Notification = sequelize.define("Notification", {
checkedAt: {
type: DataTypes.JSON,
defaultValue: {
bySomeJob: new Date(),
bySomeOtherJob: new Date()
}
}
});
как я безуспешно пытаюсь выполнить запрос
const someDate = new Date();
await db.Notification.findAll({
where: {
checkedAt: {
bySomeJob: {
$lte: someDate
}
}
}
});
Я использовал этот метод раньше для целых и логических значений, но не с датой.
Я нашел эту функцию для преобразования строк в формат даты
sequelize.fn('date', sequelize.col('checkedAt'))
Но не уверен, можно ли и как это использовать для свойства столбца.
Я ожидаю, что смогу запрашивать модель, сравнивая объект Date с преобразованным значением из свойства столбца объекта JSON.
Ответ №1:
Если вам нужно связать несколько дат с уведомлением, то вам может быть лучше создать новую модель, используемую специально для хранения checkedAt
дат, и создать связь между уведомлениями и датами checkedAt. Что-то вроде Notification.hasMany(Dates);
Таким образом, когда вы запрашиваете уведомления, вы можете включить Dates
таблицу, а затем указать, какие даты включать из этой таблицы, как при использовании $lte
, что вы и пытались.
Это может выглядеть примерно так
await db.Notification.findAll({
include: [
{
model: db.Date,
where: {
checkedAt: {
bySomeJob: {
$lte: someDate
}
}
}
}
]
});