【发布时间】:2021-08-03 21:45:17
【问题描述】:
在这里寻求帮助。
我有一个基本的 postgres 选择语句,它只返回一个 JSONb 列。
************ 编辑以添加 SQL 查询 ************
anpool.query(`SELECT data as test
FROM appanalytics
WHERE to_date(data->>'dateTime', 'MM/DD/YYYY')
BETWEEN $3
AND $4
AND cid=$1 AND aid=$2`,[req.session.cID,req.session.AccountID,endDate,startDate]).then(analytics =>{
//This returns an array of objects, each object in the array
// is wrapped in the column name as shown above
console.log(analytics)
});
现在这工作正常,但是数组中的每个对象都包含在表名中
[
{
test: {
ip: '10.10.10.10',
atID: 0,
uuID: '084B98DE-6D89-490E-8238-E25DDC8E5C04',
itemID: '0',
timeEnd: '2021-07-28T13:40:16.788Z',
actionID: 'speakerMainDetail',
dateTime: '07/28/2021',
location: [Object],
timeStart: '2021-07-27T12:54:21.284Z',
deviceType: 'web'
}
}
]
所以,在这个响应中,您可以看到,对象嵌套在“测试”中,我需要它是顶层,所以每个响应对象都没有嵌套在测试中,关于如何可能的任何想法?使用 nodeJS 和 pg npm。
谢谢
【问题讨论】:
-
请向我们展示您的 SQL 和 JS 代码,然后我们才能建议您需要更改的内容。
-
@Bergi 我已经添加了有问题的实际查询,谢谢
-
啊,是的,你得到了一个行数组,每个对象都有你选择的列。您实际上并没有什么可以或应该做的事情 - 请注意您不能使用
ip、atID等作为列名,因为(可能)这些是动态的。只需analytics.map(row => row.test)。 -
顺便说一句,如果您使用的是 node-postgres 而不是围绕它的一些包装器,您不应该得到带有
.rows属性而不是数组的查询结果吗? -
@Bergi 是的,它确实返回包裹在 .rows 中,然后在其中返回包裹在列名中的 JSONB 数据。但是,您对映射结果的评论效果很好!如果您想添加答案,我将很乐意接受。感谢您的帮助!
标签: javascript node.js postgresql