来自 postgresql 和 pg-promise 的嵌套查询
Nested query from postgresql and pg-promise
我正在尝试使用 pg-promise 从节点中的 postgres 检索嵌套查询。
我只能从表中检索包含混合数据的简单非嵌套结果。
我想从三个表(用户、posts、评论)中为每个 post - users.username、posts.text、[=29= 获取一个数据集], comments.author, comments.text, comments.timestamp。用户和 post 与用户名链接,post 和评论与 posts.id 和 comments.parrent 链接。
这是我要获取的数据:
[
{"username": "jane",
"postText": "Hello",
"postId": 4,
"postTimestamp: "1651156414",
allComments: [
{"commentsId": 2,
"commentsAuthor": "john",
"commentsText": "nice",
"commentsTimestamp": "156454565456"
},
{"commentsId": 3,
"commentsAuthor": "ghost",
"commentsText": "hiii",
"commentsTimestamp": "165165848"}]
}]
我正在用 pg-promise 做:
function getUsers(t) {
return t.map('SELECT * FROM posts', post=> {
return t.map('SELECT * FROM users WHERE users.username = post.username', post.id, user => {
return t.any('SELECT * FROM comments, posts WHERE comments.parrent = post.id', user.id)
.then(comment => {
user.comment = comment;
return user;
});
})
.then(t.batch)
.then(user=> {
post.user = user;
return post;
});
}).then(t.batch);
}
db.task(getUsers)
.then(data => {
console.log(data)
res.send(data)
})
.catch(error => {
console.log(error)
});
});
它给我错误:
TypeError: undefined is not a function at Array.map (<anonymous>) at obj.any.call.then.data
你有什么想法吗,我做错了什么?谢谢
问题出在这一行:
return t.map('SELECT * FROM posts', post => {
应该是:
return t.map('SELECT * FROM posts', [], post => {
您将函数作为格式参数传递,因此出现了问题。
但一般来说, 通过 JSON 函数 json_build_object
在性能方面提供了一种更优越的解决方案,因为您将只执行一个查询,而不是执行多个查询正在尝试。
我正在尝试使用 pg-promise 从节点中的 postgres 检索嵌套查询。
我只能从表中检索包含混合数据的简单非嵌套结果。
我想从三个表(用户、posts、评论)中为每个 post - users.username、posts.text、[=29= 获取一个数据集], comments.author, comments.text, comments.timestamp。用户和 post 与用户名链接,post 和评论与 posts.id 和 comments.parrent 链接。
这是我要获取的数据:
[
{"username": "jane",
"postText": "Hello",
"postId": 4,
"postTimestamp: "1651156414",
allComments: [
{"commentsId": 2,
"commentsAuthor": "john",
"commentsText": "nice",
"commentsTimestamp": "156454565456"
},
{"commentsId": 3,
"commentsAuthor": "ghost",
"commentsText": "hiii",
"commentsTimestamp": "165165848"}]
}]
我正在用 pg-promise 做:
function getUsers(t) {
return t.map('SELECT * FROM posts', post=> {
return t.map('SELECT * FROM users WHERE users.username = post.username', post.id, user => {
return t.any('SELECT * FROM comments, posts WHERE comments.parrent = post.id', user.id)
.then(comment => {
user.comment = comment;
return user;
});
})
.then(t.batch)
.then(user=> {
post.user = user;
return post;
});
}).then(t.batch);
}
db.task(getUsers)
.then(data => {
console.log(data)
res.send(data)
})
.catch(error => {
console.log(error)
});
});
它给我错误:
TypeError: undefined is not a function at Array.map (<anonymous>) at obj.any.call.then.data
你有什么想法吗,我做错了什么?谢谢
问题出在这一行:
return t.map('SELECT * FROM posts', post => {
应该是:
return t.map('SELECT * FROM posts', [], post => {
您将函数作为格式参数传递,因此出现了问题。
但一般来说,json_build_object
在性能方面提供了一种更优越的解决方案,因为您将只执行一个查询,而不是执行多个查询正在尝试。