【发布时间】:2019-08-14 00:31:38
【问题描述】:
已编辑
我有两个“问题”:
- pg-promise 结果是包含所有小写选定字段的对象
- 在我们公司,我们为数据库的字段实施了命名约定
我们不希望服务器返回具有真实字段名称的对象。我可以像这样使用receive 事件重命名它们:
const initOptions = {
receive(data, result, e) {
// data = { myid: 1, tname: 'name' }
refactorProperties(data);
// data = { myId: 1, name: 'name' }
}
};
const columnToJS = {
"myid": "myId",
"tname": "name",
"anotherdatabasefieldname": "theJSObjectProperty",
};
function refactorProperties(data) {
data.forEach(tmp => {
for(const prop in tmp) {
const newProp = columnToJS[prop];
if(newProp) {
tmp[newProp] = tmp[prop];
delete tmp[prop];
}
}
});
}
这里它是一个非常小的对象,但实际上它会大得多(连接查询等)doc 指定
这里的任何数据预处理都需要快速,以避免性能损失。
限制是多少? pg-promise 是否有帮助者或类似的东西来使用 Columns 完成此操作?
const cs = new pgp.helpers.ColumnSet([
{ name: 'myid', prop: 'myId', cnd: true /* other options */ }
{ name: 'tname', prop: 'name' /* other options */ },
{ name: 'anotherdatabasefieldname', prop: 'theJSObjectProperty' /* other options */ },
], {
table: 'mytable'
});
const query = pgp.helpers.insert(obj, cs);
// query = "INSERT INTO "mytable"("tname","anotherdatabasefieldname") VALUES('nameValue','anotherValue')"
const query2 = pgp.helpers.insert(obj, cs, true); // third params = return values ?
// query2 = "INSERT INTO "mytable"("tname","anotherdatabasefieldname") VALUES('nameValue','anotherValue') RETURNING myid AS "myId", tname AS "name", anotherdatabasefieldname AS "theJSObjectProperty"
const query3 = pgp.helpers.select(obj, cs);
// query3 = "SELECT myid AS "myId", tname AS "name", anotherdatabasefieldname AS "theJSObjectProperty" FROM mytable where [...]"
【问题讨论】:
-
不清楚您在寻找什么。你能突出实际问题吗?不清楚你想
inverse,而without put aliases in each query。第二部分看起来像你想骆驼化它?该示例看起来不一致,但可以得出结论。 -
我编辑了我的帖子。我希望它更清楚。我所说的“反向”是指,因为我们可以使用Column 将 JS 对象属性绑定到数据库字段,是否可以使用它在查询中生成别名?
-
pg-promise 不做任何选择别名,因为它根本不生成任何
SELECT语句。
标签: node.js pg-promise