- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Postgres 中有一列存储一些 JSON 数据。 JSON 没有定义的架构,但应该可以搜索具有某个指定键的所有记录。
我正在使用 KnexJS 构建查询,到目前为止我想到了这个:
tx.select('*').from('table')
.whereRaw('cast(data->>? as ?) = ?', [key, type, JSON.parse(value)]));
但它不起作用,因为我认为无法指定类型。
仍然,当我尝试像这样手动指定它时:
tx.select('*').from('table')
.whereRaw('cast(data->>? as boolean) = ?', [key, JSON.parse(value)]));
还是不行!这是使用 DEBUG:knex:*
{ key: 'admin', value: 'true', type: 'boolean' }
knex:tx trx1: Starting top level transaction +0ms
knex:pool INFO pool postgresql:pg:client0 - dispense() clients=1 available=0 +2ms
knex:client acquired connection from pool: __knexUid2 +38ms
knex:query BEGIN; +2ms
knex:bindings undefined +1ms
knex:query select * from "contexts" where cast(data->>? as boolean) = ? +18ms
knex:bindings [ 'admin', true ] +0ms
knex:query COMMIT; +9ms
knex:bindings undefined +0ms
knex:tx trx1: releasing connection +6ms
knex:client releasing connection to pool: __knexUid2 +1ms
knex:pool INFO pool postgresql:pg:client0 - dispense() clients=0 available=1 +1ms
关于如何实现此目标的任何想法?
提前致谢!
最佳答案
要从 JSONB 字段中搜索特定键,您可以使用 ?
、?|
和 ?&
运算符,但从问题我相信你是实际上试图找到特定键具有特定值的所有行。
PostgreSQL 协议(protocol)不支持将类型作为绑定(bind)传递,因此您需要像第二个示例中那样将其作为原始字符串传递。
但是你仍然在那里做一些非常奇怪的事情:
tx.select('*').from('table')
.whereRaw('cast(data->>? as boolean) = ?', [key, JSON.parse(value)]));
data->>?
以字符串形式返回您的 json 属性值。然后将其转换为 bool 值并将其与某个值 JSON.parse(value) 进行比较,该值可能几乎是任何值。
从错误 { key: 'admin', value: 'true', type: 'boolean' }
看来你的值实际上已经是一个字符串,所以这应该有效:
tx.select('*').from('table')
.whereRaw('data->>? = ?', [key, JSON.parse(value)]));
无论如何,由于对“真实”字符串进行了显式转换,您的第二个示例也应该有效。我添加了 knex 示例,表明您的案例应该有效:
await knex.schema.createTable('test2', t => {
t.increments('id');
t.jsonb('test');
});
await knex('test2').insert([
{ test: '{ "a": true, "b": false }' },
{ test: '{ "b": true, "a": false }' }
]);
await knex('test2').whereRaw('cast(test->>? as boolean) = ?', ['a', 'true']);
// outputs: [ anonymous { id: 1, test: { a: true, b: false } } ]
有关如何使用 postgresql 执行 jsonb 查询的更多信息,请参见此处 https://www.vincit.fi/en/blog/objection-js-postgresql-power-json-queries/基于 knex 的 ORM objection.js 也明确支持 postgres jsonb 查询。
关于javascript - Knexjs PgSQL json 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44428665/
在他们的website上,KnexJS 开发人员似乎声称可以使用 Browserify 捆绑该库并在浏览器中运行它。这实际上是如何运作的?您不需要基于套接字的连接来连接到目标数据库(浏览器 JavaS
我有一个查询如下: SET @count = 0; UPDATE table SET table.id = @count:= @count + 1 WHERE table.name = "name";
我正在寻找一个 javascript 库来管理 mysql 数据库,发现 Knexjs 非常适合我的需求,但我不想让数据库和表从 js 源文件中读取。 另一方面,我不能仅仅混淆 js,因为应用程序也无
我最近一直在使用 KnexJS,并且从 KnexJS 文档中获得了我需要的大部分内容,但是我有一些更复杂的 MySQL 查询,我无法自己将其“移植”到 Knex。我知道可以选择使用 .raw(),但我
我正在将 knexjs 与 postgrsql 一起使用,并且我正在尝试获取比当前日期和时间早的所有日期和时间的数据。例如我有这个数据 {
我正在构建一个 NodeJS API 后端并使用 Knex 来处理数据库迁移等。 我有 3 个表:stalls、markets 和 bookings 在我的 bookings 表中,我想引用 stal
我的问题是是否可以通过某种方式将 KnexJS 的字符编码更改为 utf8mb4。它似乎默认为 utf8。 当我尝试通过以下方式在 NodeJS 服务器上的当前 KnexJS 版本中创建一个表时 db
我需要将此 SQL 查询转换为 KnexJS 查询 SELECT Book.Title, Book.Number, Author.Name, Author_1.Name
我正在使用 Knex.JS 创建一个表, 表格中有一列表示货币值。 例如,这里是 amount 列: knex.schema.createTable('payment', function(table
我在 PostgreSQL 中有一个更新插入查询,例如: INSERT INTO table (id, name) values (1, 'Gabbar') ON CONFLICT (id)
我目前使用 knexjs.org , promise 而不是常规回调并使用池连接进行 SQL 查询。第一次,它运行顺利。但是现在我通常会遇到池连接错误。代码是这样的 knex('user_detail
我遇到了这个问题,我有一组数据要使用 knexjs 插入。但我希望插入忽略重复项,即仅在数据不存在时才插入。我可以做到这一点 knex('rates').insert(allRates); 但我想知道
我对 Node、KnexJS 和 Promise 非常陌生,我正在尝试构建一个简单的循环来查询项目,然后添加与它们关联的图片。 我查看了这个答案,虽然它教了一些东西,但我认为它不适用于我的情况:Kne
我在学习 BookshelfJS/KnexJS(从 SequelizeJS 切换)的过程中遇到了将数据导入多个表的问题,这些表是通过 KnexJS 中的迁移功能创建的。有 4 个表: 服务器 oper
我在 KnexJS 中使用 PostgreSQL 进行以下迁移时遇到问题: exports.up = (knex) => { knex.raw('CREATE EXTENSION IF NOT
我正在使用 Knexjs 和 Promise 运行多个选择查询。我需要所有查询在发送结果之前返回一个值,我已经能够实现这一点。但是我不认为代码非常优化。 knex(table).select('CRM
我正在构建一个使用 node + express + postgresql + knexjs ORM 的应用程序。我正在尝试运行迁移: knex 迁移:最新 但我的控制台一直在返回: 使用环境:开发
我在生产中遇到严重问题,导致应用程序无响应并输出以下错误: Knex: Timeout acquiring a connection. The pool is probably full. Are y
我在 Postgres 中有一列存储一些 JSON 数据。 JSON 没有定义的架构,但应该可以搜索具有某个指定键的所有记录。 我正在使用 KnexJS 构建查询,到目前为止我想到了这个: tx.se
我是 PostgreSQL 和 Node 的新手。我正在使用 knex.js 库。我需要创建角色并将其分配给我在 PostgreSQL 中创建的每个表。我不确定如何实现它。是不是要在表迁移的时候做?或
我是一名优秀的程序员,十分优秀!