NodeJS 如何在postgres中使用Sequelize创建对象数组?

yftpprvb  于 2023-05-17  发布在  Node.js
关注(0)|答案(1)|浏览(146)

我的想法是定义一个消息模型,它有'id'和'message'属性,'message'属性将是一个对象数组。
例如:[{from, to, msg, time}]及其各自的值。
这是我如何定义模型的:

import { DataTypes } from 'sequelize';
import sequelize from '../config/database.js';

const MessageSchema = sequelize.define('messages', {
    id: {
        type: DataTypes.INTEGER,
        autoIncrement: true,
        primaryKey: true
    },
    message: {
        type: DataTypes.ARRAY(DataTypes.JSONB)
}, {
    freezeTableName: true
});

export default MessageSchema;

当我运行应用程序时,我得到了这个:column "message" cannot be cast automatically to type jsonb[]
我该怎么解决?

r55awzrz

r55awzrz1#

您遇到的错误告诉我们,您正在使用的pgSQL数据库无法自动将“message”列转换为JSONB数组类型。
一个可能的解决方案是通过使用“type”选项和“DataTypes.ARRAY”方法,将列类型显式定义为JSONB数组。
请尝试下面的代码。

import { DataTypes } from 'sequelize';
import sequelize from '../config/database.js';

const MessageSchema = sequelize.define('messages', {
    id: {
        type: DataTypes.INTEGER,
        autoIncrement: true,
        primaryKey: true
    },
    message: {
        type: DataTypes.ARRAY(DataTypes.JSONB),
        allowNull: false,
        defaultValue: []
    }
}, {
    freezeTableName: true
});

export default MessageSchema;

我添加了“allowNull:false”以确保始终需要“message”列,以及“defaultValue:[]”将空数组设置为默认值。
我希望这个更新会对你有所帮助。

相关问题