我有一个用Javascript编写的应用程序,它使用postgreSQL(9.6)DB来存储数据。 有没有一种方法可以将Javascript对象直接插入DB中?
我创建了这个示例表:
CREATE TABLE people (
"uuid" uuid PRIMARY KEY,
"name" text NOT NULL,
"phone" number
);
应用中的Javascript对象:
{
uuid: 'df7c5fdc-d6b7-4b5e-ac3b-1228fac64a90',
name: 'Martin',
phone: 123456
}
现在,我有一系列不同的人(上面的对象阵列),我设法以这种方式将其插入数据库:
let uuids = people.map(p => `'${p.uuid}'`) // adding quotes, otherwise syntax error
let names = people.map(p => `'${p.name}'`)
let phones = people.map(p => `'${p.phone}'`)
INSERT INTO people (
"uuid",
"name",
"phone"
)
VALUES (
UNNEST(ARRAY[${uuids}])::uuid,
UNNEST(ARRAY[${names}])::text,
UNNEST(ARRAY[${phones}])::number
)
有没有一种方法可以更有效地做到这一点?像在mongo db.collection.insertMany(array)
中一样?另外,我想省略一些值并使用NULL
,在此示例中是不可能的。
我正在PostgreSQL文档中搜索,有几个函数可以使用json,但我找不到适合的函数。
谢谢您的帮助。
答案 0 :(得分:2)
有机会测试json_to_recordset()
:
INSERT INTO people("uuid", name, phone)
SELECT "uuid", name, phone
FROM json_to_recordset(?) AS x("uuid" uuid, name text, phone int);
占位符应绑定到您所描述的对象数组上(当然,使用正确的JSON除外)。