- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在查看 pg-promise 中的示例对于方法map :
// Build a list of active users, each with the list of user events:
db.task(t => {
return t.map('SELECT id FROM Users WHERE status = $1', ['active'], user => {
return t.any('SELECT * FROM Events WHERE userId = $1', user.id)
.then(events=> {
user.events = events;
return user;
});
}).then(t.batch);
})
.then(data => {
// success
})
.catch(error => {
// error
});
假设 Event
实体与例如具有一对多关系。 汽车
,我想列出连接到每个事件
的所有汽车
,我该如何使用map当我想要的对象深度超过一层时函数?
我想要的结果可能是这样的:
[{
//This is a user
id: 2,
first_name: "John",
last_name: "Doe",
events: [{
id: 4,
type: 'type',
cars: [{
id: 4,
brand: 'bmw'
}]
}]
}]
最佳答案
我是 pg-promise 的作者.
<小时/>function getUsers(t) {
return t.map('SELECT * FROM Users WHERE status = $1', ['active'], user => {
return t.map('SELECT * FROM Events WHERE userId = $1', user.id, event => {
return t.any('SELECT * FROM Cars WHERE eventId = $1', event.id)
.then(cars => {
event.cars = cars;
return event;
});
})
.then(t.batch) // settles array of requests for Cars (for each event)
.then(events => {
user.events = events;
return user;
});
}).then(t.batch); // settles array of requests for Events (for each user)
}
然后使用它:
db.task(getUsers)
.then(users => {
// users = an object tree of users->events->cars
})
.catch(error => {
// error
});
方法map简化了将检索到的行映射到其他内容的过程,并且由于我们将它们映射到 promise 中,因此需要解决这些问题,为此我们使用方法 batch 。我们对汽车
的每个内部请求数组执行此操作,然后在顶层 - 解决事件
的请求数组。
更新
如果将树逻辑颠倒过来,可能会更容易阅读和维护:
function getUsers(t) {
const getCars = eventId => t.any('SELECT * FROM Cars WHERE eventId = $1', eventId);
const getEvents = userId => t.map('SELECT * FROM Events WHERE userId = $1', userId, event => {
return getCars(event.id)
.then(cars => {
event.cars = cars;
return event;
});
}).then(t.batch);
return t.map('SELECT * FROM Users WHERE status = $1', ['active'], user => {
return getEvents(user.id)
.then(events => {
user.events = events;
return user;
});
}).then(t.batch);
}
<小时/>
还有一种更快的单查询方法,可以在这里找到:
关于node.js - 使用 pg-promise 进行嵌套查询对象映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40273308/
运行马里奥游戏时此文件出现错误当我尝试运行文件 super_mario.py 时,我从以下链接( https://github.com/Ja1r0/DQN-play-SuperMario )下载了代码
来自pg module doc ,似乎连接到 PG 数据库的正确方法是使用: conn = PG::Connection.open(dbname: 'test') 但是,我发现 other examp
嘿,所以我试图让 Nodejs Koa 使用 Koa-pg 模块与 postgres 对话,但我一直收到“找不到模块 pg”错误。我已尝试遵循 koa-pg 示例,但效果不佳……因此,我们将不胜感激任
我需要一些关于 pg npm 的帮助。 我已经阅读了许多文章和示例,并且对以正确的方式使用 pg 池感到非常困惑。许多文章都是我读过的旧文章。 我想向您展示我的一些代码以及我是如何围绕 db 构建所有
我有一个 postgresql 表,每天都有数千条时间序列数据。我有一个应用程序允许用户检索这些数据。查询可能需要 200 毫秒到 30 秒,具体取决于时间范围,因此这些查询必须是可取消的,以避免对生
我不确定我的 heroku postgres 发生了什么,但是当我尝试使用命令行访问它时 pg:info和 pg:psql ,我得到“未找到”。 我什至单击 heroku 上的按钮也为我的应用程序创建
给定一个包含 jsonb[] 类型列的表,如何将 json 数组插入到该列中? 使用提供的格式化程序 :array、:json 在这种情况下将不起作用 - 除非我缺少正确的组合或其他内容。 const
我是 node 和 pg-promise 的新手,一直无法弄清楚如何将三个相关查询的结果合并到一个 json 结果中。 给定三个相关表: 父实体 create table parent ( id bi
在开发时,我需要拉取最新的数据库,以便我知道我正在使用最新的数据。但是,我们保留了一张表,里面装满了我不需要费心下载的文件,因为它是一个非常大的表。 我知道 pg_dump 允许自定义参数,这些参数可
当我运行时(作为 root) gem install pg -v '0.12.0' -- --with-pg-config=/usr/pgsql-9.1/bin/pg_config 我得到以下输出:
我在尝试使用annotation@type(type=“pg uuid”)时遇到了一些问题。它抛出此异常: Caused by: java.lang.ClassNotFoundException: C
我按照这个线程 (Cannot install pg gem in Mavericks with Postgres.app) 获得了 'pg' gem 成功地与 Mavericks 上的 Postgr
正在获取 pg:找不到模型 id="," 的 dst 值 我定义了以下模型 // omitting fields which don't seem relevant to the issue // c
如何在Ruby pg gem 中使用PG::Connection 类的公共(public)实例方法send_query? 它可以帮助加快这样的程序的执行时间吗? a = [1,2,3,4,5,6,..
大家好,我一直在尝试使用 capistrano 部署我的应用程序。但是,我始终收到以下错误,并且不知道如何解决它。 * executing "cd /var/www/html/mysite.com/r
在我的 TestLogger 类中,require 'pg'(版本 0.16.0)返回 true,但 PGconn 未注册。 到目前为止,只有服务器有这个问题,而且只在TestLogger。其他确实需
使用 VSCode。为 Windows 安装了最新的 Node.js(首次用户)以及所需的模块,其中一个是“pg”(npm install pg) 在我的脚本顶部有这样的内容:const pg = r
我写了一个简单的脚本:。This.db对应于一个Pool对象。所以我在数据库中选择了一个特定的对象,在它的旁边我试图取回相同的对象,但这次使用了creation_date字段。。我尝试了许多结果变量更
我做了一个简单的脚本:。This.db对应于Pool对象。因此,我使用他的ID在我的数据库中选择了一个特定的对象。在它旁边,我试图取回相同的对象,但这次使用的是Creation_Date字段。。我尝试
我希望执行以下操作。 使用 group by 查询查询大型表以执行值汇总。 通过例程运行这些记录以添加一些附加数据 将它们高效地插入数据库。 我尝试使用 pg-query-stream 将数据作为流读
我是一名优秀的程序员,十分优秀!