标签: jsonb

索引jsonb以进行字段的数字比较

我已经定义了一个简单的表

create table resources (id serial primary key, fields jsonb);
Run Code Online (Sandbox Code Playgroud)

它包含带键的数据(从大集中绘制)和1到100之间的值,如:

   id   |    fields                                                                                                 
--------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
      1 | {"tex": 23, "blair": 46, "cubic": 50, "raider": 57, "retard": 53, "hoariest": 78, "suturing": 25, "apostolic": 22, "unloosing": 37, "flagellated": 85}
      2 | {"egoist": 75, "poshest": 0, "annually": 19, "baptists": 29, "bicepses": 10, "eugenics": 9, "idolizes": 8, "spengler": 60, "scuppering": 13, "cliffhangers": 37}
      3 | {"entails": 27, "hideout": 22, "horsing": 98, "abortions": 88, "microsoft": 37, "spectrums": 26, "dilettante": 52, "ringmaster": 84, "floweriness": 72, "vivekananda": …
Run Code Online (Sandbox Code Playgroud)

postgresql json jsonb postgresql-9.4

1
推荐指数
1
解决办法
1368
查看次数

在 Postgres JSONB 列中按编号排序

position在 JSONB 列中定义了一个键。

这些值被视为文本,因此以下查询

MyModel.order("data ->> 'position' ASC").each {|x| puts x.position}
Run Code Online (Sandbox Code Playgroud)

返回:

0
1
10
2
3
Run Code Online (Sandbox Code Playgroud)

我如何将其position视为整数并根据它对我的模型进行排序?

postgresql ruby-on-rails jsonb ruby-on-rails-5

1
推荐指数
1
解决办法
1309
查看次数

选择包含正则表达式匹配的 Jsonb 数组

给定一个数据结构如下:

{"single":"someText", "many":["text1", text2"]}
Run Code Online (Sandbox Code Playgroud)

我可以查询单个正则表达式

WHERE JsonBColumn ->> 'single' ~ '^some.*'
Run Code Online (Sandbox Code Playgroud)

我可以查询数组上的包含匹配

WHERE JsonBColumn -> 'many' ? 'text2'
Run Code Online (Sandbox Code Playgroud)

我想做的是用 JArray 上的正则表达式进行包含匹配

WHERE JsonBColumn -> 'many' {Something} '.*2$'
Run Code Online (Sandbox Code Playgroud)

regex postgresql jsonb

1
推荐指数
1
解决办法
8228
查看次数

Postgres:跨行连接JSONB值?

我正在掌握Postgres中的JSONB功能> = 9.5(并且喜欢它)但是遇到了绊脚石.我已经读过关于连接JSON字段的能力,所以'{"a":1}' || '{"b":2}'创建{"a":1,"b":2},但我想在多行的同一个字段中执行此操作.例如:

select row_concat_??(data) from table where field = 'value'
Run Code Online (Sandbox Code Playgroud)

我发现了jsonb_object_agg一个听起来像我想要的功能,除了文档显示它带有多个参数,而我只有一个.

有什么想法我会怎么做?jsonb_agg成功创建一个数组,感觉我真的很亲密.

postgresql jsonb

1
推荐指数
1
解决办法
909
查看次数

如何获取 Postgres 中单个表中所有列的不同值?

理想情况下,我想运行一个查询,返回一个表,其中每一行都是指定表的列名,并且jsonb表中与该列对应的所有不同值的数组。

棘手的部分似乎是动态执行的,我可以只指定表而不是每个单独的列。

我可以从 中检索相关表的所有列名information_schema.columns,但是有没有一种简单的方法可以将其与查询结合起来以检索每列的所有不同值?

sql postgresql json jsonb

1
推荐指数
1
解决办法
2807
查看次数

Postgresql JSONB 数组值的内联总和

我试图弄清楚对象数组中特定字段的内联求和的查询语法是什么。我的数据结构如下

CREATE TABLE "orders" (
  order_id int8,
  tax_lines jsonb
);
INSERT INTO "orders"(order_id, tax_lines) VALUES (4521745668, '[
  {
    "rate": 0.029,
    "price": "0.43",
    "title": "CO State Tax"
  },
  {
    "rate": 0.00985,
    "price": "0.15",
    "title": "Boulder County Tax"
  },
  {
    "rate": 0.0496,
    "price": "0.74",
    "title": "Boulder Municipal Tax"
  }
]');
Run Code Online (Sandbox Code Playgroud)

我想要达到的结果是

order_id         cumulative_tax_rate
4521745668       .08845
Run Code Online (Sandbox Code Playgroud)

据我所知

SELECT
  o.order_id,
  SUM((jsonb_array_elements(o.tax_lines) ->> 'rate')::numeric) AS cumulative_tax_rate
 FROM orders o WHERE o.order_id = '4521745668'
Run Code Online (Sandbox Code Playgroud)

但它一直要求使用我想避免的 GROUP BY 子句。我想知道是否可以在没有 group by 子句的情况下在行级别执行此聚合,如果可以,该语法可能是什么样子?

先感谢您。

postgresql sum jsonb

1
推荐指数
1
解决办法
3052
查看次数

Postgres查询JSON数组

我有一个名为cust_data的表,它存储id和JSON对象.我想编写postgres select语句来获取:

  1. 选择所有id的"性别":人员阵列中不存在"女性"[这应该从以下数据返回id#3]
  2. 选择所有id的"性别":"女性"存在和"状态":"已婚"[这应该从下面的数据返回id#2]

表:cust_data

id(numeric) | connections (jsonb)
------------------------------

1, {"Persons": [
            {
              "personName": "Tom",
              "gender": "Male",
              "country": "USA",
              "status":"single"

            },
            {
            "personName": "Harry",
            "gender": "Male",
            "country": "USA",
            "status":"single"
            },
            {
            "personName": "Lisa",
            "gender": "Female",
            "country": "Mexico",
            "status":"single"
              }    
          ]
        }

        2,{
          "Persons": [
            {
              "personName": "Lisa",
              "gender": "Male",
              "country": "UK",
              "status":"single"
            },
            {
            "personName": "Harry",
            "gender": "Male",
            "country": "USA",
            "status":"single"
            },
            {
            "personName": "Lisa",
            "gender": "Female",
            "country": "Mexico",
            "status":"married"
              }    
          ]
        }

        3,{
          "Persons": [
            {
              "personName": "Lisa", …
Run Code Online (Sandbox Code Playgroud)

arrays postgresql json postgresql-9.1 jsonb

1
推荐指数
1
解决办法
975
查看次数

在JSONB中续集更新嵌套属性

我正在寻找一种仅更新jsonb列内嵌套键/值的方法。
这是User模型:

const User= sequelize.define('User', {
    id: DataTypes.INTEGER,
    name:DataTypes.STRING,
    // other fields
    data: DataTypes.JSONB
});
Run Code Online (Sandbox Code Playgroud)

当前data列值:

{
 'email':{'verified':false,'token':'random token'},
 'phone:{'verified':true}
}
Run Code Online (Sandbox Code Playgroud)

我想将email.verified属性更新为true使用单个 update查询。

我尝试了以下代码:

models.User.update({'data.email.verified':true},
       {where:{id:1}}).then()...

models.User.update({data:{email:{verified:true}}},
       {where:{id:1}}).then()...
Run Code Online (Sandbox Code Playgroud)

更新的列将是:

{
 'email':{'verified':true},
}
Run Code Online (Sandbox Code Playgroud)

我也试过这个:

models.User.findById(1).then(user => {
    user.set('data.email.verified', true);
    user.save().then()...
});
Run Code Online (Sandbox Code Playgroud)

这有效,但我不想执行两个查询(选择然后更新)仅更新一个字段。

是否可以通过sequelize单个更新查询来执行此操作?

sequelize.js jsonb

1
推荐指数
2
解决办法
2818
查看次数

如何使用 SQLAlchemy 的“执行”插入 JSONB?

我需要运行一个接受整数和 JSONB 数据的函数。在普通控制台中,我会像这样运行它:

select my_func(0, '{"foo": "bar"}'::jsonb)

这就是我假设它在 SQLAlchemy 中工作的方式:

params = {'p1': 0, 'p2': JSONB('{"foo": "bar"}'))}
result = db.engine.execute(text('select my_func(:p1, :p2)'), params)
Run Code Online (Sandbox Code Playgroud)

但事实并非如此。我应该如何让 SQLAlchemy 理解我要插入的是 JSONB?

python postgresql sqlalchemy jsonb

1
推荐指数
1
解决办法
1622
查看次数

使用 jsonb_to_recordset 查询生成器原始横向连接

希望是一个非常简单的问题。我正在尝试根据我的 postgresql 查询在 Laravel 中创建一个查询,我很难转换这个特定的连接,因为它是使用 jsonb_to_recordset 的横向连接。

join lateral jsonb_to_recordset(gift_splits) as r("house_id" int, "amount" json) on true
Run Code Online (Sandbox Code Playgroud)

这是我迄今为止尝试过的,它说我的论点太少了。我知道它想要“a”、“=”、“b”,但我不确定如何将“on true”翻译为“on true”以及连接的横向方面。

        ->join(DB::raw("lateral jsonb_to_recordset(gift_splits) as r(house_id int, amount json)"), true)
Run Code Online (Sandbox Code Playgroud)

最后,我尝试将整个查询发布到 Model::raw(DB::raw("...) 中,但我遇到了很多小错误。我希望对我的实际问题提供反馈。

php jsonb laravel-query-builder lateral-join

1
推荐指数
1
解决办法
1000
查看次数