【发布时间】:2020-12-10 20:41:23
【问题描述】:
我有一个结构复杂的 PostgreSQL 表:
"item": [{
"field10",
"field11",
"field12": {
"field20"
},
"field13": [{
"field21": [{
"field30"
}
],
"field22": [{
"field31"
"field32": {
"field40"
}
}
],
}
]
}]
我必须对过滤器进行查询,直到 field40 比我看到的对象更简单的许多解释。 你能解释一下我该怎么做吗?
编辑:
我做的例子比现实更简单。实际上,对象非常非常长。如果我尝试用值做一个简单的例子,那就是这样:
{
"uuid": "64fc7a55-be2d-41d8-99c1-d08fa5780731",
"item": [{
"field10" : 2004,
"field11" : false,
"field12": {
"field20" : "cc092aa1-6465-4526-9292-373344ed3e18",
"field21" : "AMAZONE"
},
"field13": [{
"field22": [{
"field30" : "ee5bfd21-b2ce-453e-94a2-ef9c87002758",
"field31" : "MICROSOFTE"
},{
"field30" : "2eb39939-08b9-4456-9b5b-eff88f00bacb",
"field31" : "GOOGLEE"
}
],
"field23": [{
"field32" : "e70bec99-689a-4c5d-ab81-e7601bc5b435",
"field33": {
"field40" : "a70ce09e-21ec-46cd-bfe6-591b84c0b328",
"field41" : "https://stackoverflow.com/"
}
},{
"field32" : "e70bec99-689a-4c5d-ab81-e7601bc5b435",
"field33": {
"field40" : "7bfa6882-2e65-4f96-b4a5-6aa0d148a95d",
"field41" : "https://gis.stackexchange.com/"
}
}
],
}
]
}]
},
{
"uuid": "f131864a-338e-4f2c-91b1-13950958bd62",
"item": [{
"field10" : 2012,
"field11" : false,
"field12": {
"field20" : "2b8176e4-c858-4159-b279-d852df77c63b",
"field21" : "PIXABAYE"
},
"field13": [{
"field22": [{
"field30" : "9e70b3d8-8f3f-4ae1-ba64-86efa513bd28",
"field31" : "IOBEYAE"
},{
"field30" : "0150dba2-98de-4143-bd81-329b74874403",
"field31" : "PINTERESTE"
}
],
"field23": [{
"field32" : "3ab19111-513a-47db-9fb5-52dc0a1e1c4d",
"field33": {
"field40" : "7be95726-6698-4bdd-8f6b-2595d1704a2a",
"field41" : "https://google.com/"
}
},{
"field32" : "7993aba5-f13f-4998-af7b-9b0b8aec8aa9",
"field33": {
"field40" : "4740dbcf-84c4-40ff-a633-9207e79cabf4",
"field41" : "https://yahoo.com/"
}
}
],
}
]
}]
}
在这个例子中,我的 Postgres 表有两列,一列带有主键 uuid,另一列带有 jsonb item 中的对象 我想要的,例如,如果我搜索“field41”=“https://yahoo.com/”,则在此示例中对我的项目进行过滤,其中“field41”包含值“gis.stackexchange.com”。带有 "uuid" = "uuid": "64fc7a55-be2d-41d8-99c1-d08fa5780731" 的元组不会出现在结果中
【问题讨论】:
-
请改写并尝试更好地解释,同时提供所需的输出
-
哦,例如,我需要对字段名 field40 进行过滤。 "SELECT * FROM mytable WHERE"(...) 我看到了很多技术,但不是在这个子级别
-
这不是有效的 JSON。 “项目”是不是一个数组?你混合了两种可能性。 “field20”和“field40”没有价值。或者它们是价值观?关键是什么?还是“field32”是一个数组?你想达到什么目标?您想在任何嵌套的 JSON 中找到“field40”,还是想在这个(更正的)结构中获取“field40”的值?
-
好的,如果不清楚,我编辑了我的帖子抱歉。所以对于你的答案,item 是一个 jsonb[] “field20”和“field40”有值,关键是 item 字段中的“uuid”字段,“field32”不是一个数组,它是一个简单的字段。例如,如果我搜索“field41” = “www.google.fr” 元组与“uuid” = "uuid": "64fc7a55-be2d-41d8-99c1-d08fa5780731" 不会出现在结果中
标签: sql postgresql nosql