【发布时间】:2022-02-03 18:19:23
【问题描述】:
我有一个带有 Typescript 的 Node JS 项目,其中我在 BigQuery 中包含数据库查询。
该功能是生成一个带有搜索字段和值的 JSON 对象,以将它们传递给查询并返回与这些字段匹配的所有记录。
这是对象:
let dataObj = {
"host": "192.168,AS101",
"code": "001,025",
"country": "Colombia"
}
这是查询:
SELECT *
FROM TABLE_TEST
WHERE hostName in ('${dataObj.host}') and codeData in (${dataObj.code}) and countryName in ('${dataObj.country}')
我的问题:对象的所有字段都是可选的,如何在WHERE内添加或删除字段?
示例:
新的 JSON 对象:
let dataObj = {
"host": "192.168,AS101",
"country": "Colombia"
}
这是必须执行的查询:
SELECT *
FROM TABLE_TEST
WHERE hostName in ('${dataObj.host}') and countryName in ('${dataObj.country}')
升级:
JSON 对象的字段与表的字段名称不同,所以我需要更改它们的名称,这是我目前所做的:
function formatName(key: string) {
if (key == 'host') {
return 'hostName'
} else if (key == 'code') {
return 'codeData'
} else if (key == 'country') {
return 'countryName'
} else {
return false
}
}
let sql = " SELECT * FROM MYTABLE WHERE true ";
Object.entries(dataObj).map(
(entri) => (sql = `${sql} AND ${formatName(entri[0])} in ("${entri[1]}")`)
);
包含在 where 子句中的每个键的数据不能转到“192.168,AS101”,但必须是“192.168”、“AS101”,这样查询才能正确提取它。这就是我所做的,但查询没有捕捉到它:
let newData = {
"host": dataObj.host.split(','),
"code": dataObj.code.split(','),
"country": dataObj.country.split(',')
}
let sql = " SELECT * FROM MYTABLE WHERE true ";
Object.entries(dataObj).map(
(entri) => (sql = `${sql} AND ${entri[0]} in ("${entri[1]}")`)
);
【问题讨论】:
标签: node.js json typescript google-bigquery where-clause