标签: json

可以查询数据库中的空 jsonb

我在 Postgres 9.6 db 中有一个表,其结构如下:

Table "public.pricings"
Column           |            Type             |                       Modifiers                       
---------------------------+-----------------------------+-------------------------------------------------------
id                        | integer                     | not null default nextval('pricings_id_seq'::regclass)
unconfirmed_matrix_prices | jsonb                       | not null default '"{}"'::jsonb
Run Code Online (Sandbox Code Playgroud)

我是使用 jsonb 的新手。

我想搜索任何空的 unconfirmed_matrix_prices(即默认值)。我看到我可以做这样的事情:

solar_dev=# select count(*) from json_object_keys('{"f1":1,"f2":2}');
 count 
-------
     2
(1 row)
Run Code Online (Sandbox Code Playgroud)

有没有办法可以做一个 where 短语,其中 json_object_keys 等于 0?我知道一些变通的方法 - 有更好的方法吗?

postgresql json

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

使用 WHERE 子句更新数组的第 n 个元素

我在 PostgreSQL 10 数据库product中有一个jsonb名为“元数据”的列的表。这是我第一次使用文档和 Postgres。jsonb值看起来像这样:

{
  "name": "l33t 衬衫",
  “价格”:“1200”,
  "数量": "60",
  “选项” : 
    {
      “类型”:“收音机”,
      "title": "颜色",
      “选择”:[
        {“价值”:“红色”,“价格”:“-100”,“数量”:“30”},
        {“价值”:“蓝色”,“价格”:“+200”,“数量”:“10”},
        {“价值”:“绿色”,“价格”:“+300”,“数量”:“20”}
      ]
    }
}

两个问题:

1.如何选择“opts”数组中的特定元素?

select metadata->'options'->'opts'->(element here) from product
where  metadata->'options'->'opts' @> '[{"value" : "blue"}]'
Run Code Online (Sandbox Code Playgroud)

2 、当售出一件或多件时,如何更新“数量”(减去当前的“数量”)?

对指南/注释的进一步链接表示赞赏。

postgresql update json postgresql-10

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

在mysql 5.7及以上版本中使用json_contains函数执行通配符搜索

我有一些使用该json_object()函数获得的嵌套 json 数据。现在我需要检查我在查询中使用的特定键是否存在某个值:-

select json_object(..) from tblxyz 
  where json_contains(columnname, '{"MyName" : "FirstName LastName"}')
Run Code Online (Sandbox Code Playgroud)

这种方法的问题是我需要整个字符串“FirstName LastName”才能在实际结果中找到这一行。现在我需要执行通配符搜索。那是:-

select json_object(..) from tblxyz 
  where json_contains(columnname, '{"MyName" : "FirstName"}')
Run Code Online (Sandbox Code Playgroud)

还应该在最终结果中将此条目返回给我。有人可以建议任何解决方法吗?

mysql json mysql-5.7

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

将 json 值更新为 null

据我了解,如果您选择json_valuejson_query指定 json 文档中不存在的键或对象,那么在严格模式下,您将收到错误。例如,这使您可以确认文档中是否指定了该密钥。

如果文档中包含示例键值对:

"Test":null
Run Code Online (Sandbox Code Playgroud)

...在严格模式下,这将返回“NULL”。换句话说,您现在知道该键已在文档中定义,并且其值为 null。

现在想象您的文档包含:

 "Test":"Some string"
Run Code Online (Sandbox Code Playgroud)

而你查询:

 select json_modify(@json, '$.Test', null);
Run Code Online (Sandbox Code Playgroud)

这将返回一个缺少“Test”键的 json 字符串。

如何正确地将键值设置为 null,而不是将其从 json 文档中删除?

(上面的示例可能看起来很荒谬,但我可以想象在将 json 文档传递到下一个查询或系统之前将值设置为 null,并要求文档中存在“Test”键。)

sql-server t-sql json

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

Postgres 中的高效键值存储

我想使用 Postgres(CloudSQL 中的 11)作为高效的键值存储。我有大约 200GB 的字典(平均大小为 10kB,结构可以不同并且可以嵌套)。我正在考虑利用改进的哈希索引。这是架构:

\n\n
        CREATE EXTENSION IF NOT EXISTS "uuid-ossp";\n\n        CREATE TABLE IF NOT EXISTS key_val (\n            id uuid DEFAULT uuid_generate_v4(),\n            value jsonb,\n            EXCLUDE using hash (id with =)\n        );\n\n        CREATE INDEX IF NOT EXISTS idx_key_val ON key_val USING hash (id);\n
Run Code Online (Sandbox Code Playgroud)\n\n

获取、更新和插入非常简单,但我不知道如何实现高效的更新插入。

\n\n
INSERT INTO key_val VALUES ($1, $2) ON CONFLICT ON CONSTRAINT key_val_id_excl DO UPDATE SET value = ($2)\n
Run Code Online (Sandbox Code Playgroud)\n\n

结果是WrongObjectTypeError ON CONFLICT DO UPDATE not supported with exclusion constraints

\n\n

可能的解决方案:

\n\n …

postgresql upsert json hashing google-cloud-sql

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

如何查询postgres中jsonb字段中嵌套的json字符串?

在我们的数据库中,一个 JSONB 列包含一个对象,该对象具有一个属性,该属性是字符串编码的 JSON 对象。我需要在查询期间反序列化该字符串并检查其值。

create table datas (id int, data jsonb);
insert into datas (id, data) values (1, '{"key1": "{\"foo\": \"bar\"}"}');
Run Code Online (Sandbox Code Playgroud)

我可以选择字符串值,但将其转换为 JSONB 对象不起作用。这些查询都返回 null foo

select data->'key1'->'foo' from datas;
select to_json(data->'key1')->'foo' from datas;
select (data->'key1')::jsonb->'foo' from datas;
Run Code Online (Sandbox Code Playgroud)

dbfiddle:https://dbfiddle.uk/? rdbms=postgres_9.6&fiddle=9c0a9f7f1323a35051daba5177e52f57

postgresql json

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

在 SQL Server 中存储特殊字符(德语、法语、西班牙语)会导致奇怪的字符串

我试图将德语 \xc3\x9f 存储在 SQL Server 中,但结果是 \xc3\x83\xc5\xb8。\n例如“Gleimstra\xc3\x9fe”存储为“Gleimstra\xc3\x83\” xc5\xb8e"

\n

但其他角色也会发生这种情况:

\n
    \n
  • “K\xc3\xb6nig-Karl-Stra\xc2\xad\xc3\x9fe”存储为“K\xc3\x83\xc2\xb6nig-Karl-Stra\xc3\x83\xc5\xb8e”
  • \n
  • “Quai Andr\xc3\xa9-Citro\xc3\xabn”存储为“Quai Andr\xc3\x83\xc2\xa9 Citro\xc3\x83\xc2\xabn”
  • \n
  • “Carrer dels Adre\xc3\xa7adors 存储为“Carrer dels Adre\xc3\x83\xc2\xa7adors”
  • \n
\n

我查看了数据库排序规则,它显示SQL_Latin1_General_CP1_CI_AS。然后我用谷歌搜索并找到了这个

\n

但我不知道我现有的排序规则是否导致了问题,或者我需要做什么才能存储 \xc3\xb6、\xc3\x9f、\xc3\xa9、\xc3\xab、\ 等特殊字符xc3\xa7、\xc3\xb1、\xc3\xad。

\n

更新1

\n

事实上,我将字符串存储在一nvarchar列中。我通过 .NET 应用程序将数据发送到数据库。这是我在 web.config 中作为连接字符串的内容:
\n<add name="conn" connectionString="data source=(local)\\sql;Initial Catalog=mydb;User Id=myuser;Password=mypassword;" providerName="System.Data.SqlClient"/>

\n

更新2

\n

我从 JSON 文件中读取值,并将其传递给 a Newtonsoft.Json.Linq.JArray,然后将其传递给函数,如下所示:

\n
    InsertStreetId(item.SelectToken("location.street").Value(Of String))\n\n\n  Public Shared Function InsertStreetId(ByVal street As String) As Integer\n        Dim streetId As Integer\n\n        Dim …
Run Code Online (Sandbox Code Playgroud)

collation character-set utf-8 json sql-server-2019

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

数组中的MongoDB更新对象

我有以下文件:

{
    "name" : "student_1",
    "courses" : [
        {
            "name" : "Algebra",
            "grades" : [ 98, 96, 92 ]
        },
        {
            "name" : "Computers",
            "grades" : [ 80 ]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

如何更新指定课程的成绩?例如,我想将课程中Algebra的某些测试增加10 分。

mongodb array json

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

我可以在 SQL Server 2016 CTP 2.X 中将 VARCHAR 字段主体转换为不带引号的 JSON 结果吗?

我已经下载并安装了 SQL Server 2016 Community Technology Preview 2.3,如果我理解正确,它应该包含一个名为JSON_VALUE. (更新:CTP 2.4 已经发布,但也没有提到新的 JSON 功能)

从已经可以使用的 JSON 功能开始,... FOR JSON AUTO可以在我的SELECT语句中指定“ ” ,如下所示:

SELECT [ID], [DATA] FROM [dbo].[JSONDEMO] FOR JSON AUTO
Run Code Online (Sandbox Code Playgroud)

上面我的演示查询的结果将是一个包含一列的结果集,具有一些自动生成的名称,例如JSON_F123123123JSON 格式的值,例如:

[{"ID":"IDVALUE", "DATA":"{ {name:'ramsoft', id:1234}, ... }", ... }] 
Run Code Online (Sandbox Code Playgroud)

到目前为止DATA一切顺利,但如果包含 JSON 数据,您将收到一个包含数据字符串文字的 JSON 文档,即使该字符串文字是有效的 JSON。你实际上可能想要的,或者我想要的,是:

 [{"ID":"IDVALUE", "DATA":{ {name:'ramsoft', id:1234}, ... }, ... }] 
Run Code Online (Sandbox Code Playgroud)

根据一些 MS 博客帖子,要将 JSON 值作为 JSON 值而不是作为VARCHAR(n)字符串获取,您应该编写:

SELECT [ID], JSON_VALUE(D.DATA,'$') DATA   
FROM [dbo].[JSONDEMO] D FOR …
Run Code Online (Sandbox Code Playgroud)

sql-server json sql-server-2016

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

运营商也被认为是钥匙吗?

我正在学习 MongoDB 课程,其中一项作业要求在键周围包含引号。

所以我做了这样的查询 {$push: {"key":value}}

但有人告诉我 $push 也是一个键,因为它在左侧。我一直认为键就像值的标识符,而运算符只是操作,它们没有任何关联的值。

mongodb json operator

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