我需要创建一个App。我们使用PostgreSQL作为底层数据库。我们决定Postgres的原因是因为我们想要一个关系数据库,因为各种实体及其关系(对于像Mongo这样的NoSQL数据库似乎并不理想,因为会有多个连接),同时我们想利用它的优势Postgres的数组和JSON数据类型在MySQL中不可用。
我们正在使用SailsJS框架,因为它简单,内置在socket.io API和我之前(虽然非常有限)使用此框架(使用MongoDB作为底层数据库)的经验。它使用水线作为基础ORM。
Model.query()实际上是一个很棒的功能,它允许我运行本机SQL查询。
我面临的问题与定义具有Postgres数组数据类型的模型有关。默认情况下,如果我签入数据库,则该列将更改为DB中的text数据类型。 我需要使用postgre的数组函数构建来操作数组字段。但为此,我需要能够创建一个具有所需类型的表。我需要知道这怎么可能?
答案 0 :(得分:4)
在定义Waterline模型时使用json
字段类型,例如:
module.exports = {
attributes: {
name: 'string',
my_array: 'json',
...etc...
}
}
然后您可以将数组数据直接保存到模型中,例如:
User.create({name: 'bob', my_array: [1,2,3]}).exec(...);
它将由底层适配器转换为JSON或从JSON转换。对于sails-postgresql
,它将使用json
列类型。
答案 1 :(得分:0)
我没有在这里运行node.js,所以现在无法测试它。但请尝试以下方法:
至1)
SELECT ARRAY[1,2,3+4];
至2)
PostgreSQL documentation states:
请记住,您在SQL命令中编写的内容将首先解释为字符串文字,然后解释为数组。这会使您需要的反斜杠数量翻倍。例如,要插入包含反斜杠和双引号的文本数组值,您需要写:
INSERT ... VALUES (E'{"\\\\","\\""}');