【问题标题】:Sequelize: Storing dates in JSON columns and comparing them to dates in where clausesSequelize:将日期存储在 JSON 列中并将它们与 where 子句中的日期进行比较
【发布时间】:2019-09-02 16:02:18
【问题描述】:

我正在使用 PostgreSQL 并进行续集。我有一个模型列“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 对象列的属性的转换值进行比较来查询模型。

【问题讨论】:

    标签: node.js sequelize.js


    【解决方案1】:

    如果您需要将多个日期与通知相关联,那么您最好创建一个专门用于存储checkedAt 日期的新模型,并在通知和checkedAt 日期之间创建关联。类似Notification.hasMany(Dates);

    这样,当您查询通知时,您可以包含 Dates 表,然后具体说明要从该表中包含哪些日期,例如使用 $lte,这是您尝试的方法。

    它可能看起来像这样

    await db.Notification.findAll({
        include: [
            {
                model: db.Date,
                where: {
                    checkedAt: {
                        bySomeJob: {
                            $lte: someDate
                        }
                    }
                }
            }
        ]
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-21
      • 1970-01-01
      • 1970-01-01
      • 2015-11-20
      • 2015-11-20
      • 2019-10-17
      • 2017-09-16
      相关资源
      最近更新 更多