Açıklaması şöyle
There are six get/extract operators (accessors, and serializers) which work for both json and jsonb data types (“->”, “->>”, “#>”, “#>>”). Half of these (“->”, “#>”) return json, and other half return text (“->>”, “#>>”). Note that they return NULL if the JSON doesn’t have the right structure for the request.These operators (also range and path operators) are used in a SELECT statement ...
Sadece Jsonb Operators
Açıklaması şöyle
There are also 12 additional operators that work for jsonb only (“@>”, “<@”, “?”, “?|”, “?&”, “||”, “-”, “#-”, “@?”, “@@”).These include:- Containment operators (“@>” and “<@”)- Existence operators (“?”, “?|”, “?&”)- Concatenation operator (“||”)- Deletion operators (“-”, “#-”)- Path checking operators (“@?”, “@@”).The containment and path checking operators all return boolean results, while the other operators all return jsonb results.
Açıklaması şöyle
There are also json specific aggregation functions ( json_agg etc), which allow you to aggregate (compute a single result from multiple inputs) other data types or json/jsonb into json/jsonb. You can also use standard aggregation functions after casting json to the correct type.
1. -> Select Key/Value Pair
Json'daki bir alanı çekmek için kullanılır. Key denilen şey tablodaki json/jsonb sütun ismi. Value denilen şey de Json'daki alan ismidir. Value değerine text olarak değil, kendi tipinde erişiriz.
Json'daki alan isimler F1 -> F2 -> F3 şeklinde fluent olarak kullanılabilir.
Örnek
Elimizde şöyle bir tablo olsun
CREATE TABLE LunchOrders(student_id INT, orders JSONB);
Bu tabloya veri girelim. Json verisi tek tırnak içindedir.
INSERT INTO LunchOrders VALUES(100, '{"order_date": "2020-12-11","order_details": {"cost": 4.25,"entree": ["pizza"],"sides": ["apple", "fries"],"snacks": ["chips"]}}');INSERT INTO LunchOrders VALUES(100, '{"order_date": "2020-12-12","order_details": {"cost": 4.89,"entree": ["hamburger"],"sides": ["apple", "salad"],"snacks": ["cookie"]}}');
Örnek
Sadece bir alanı sorgulamak için şöyle yaparız.
SELECT orders -> 'order_date' FROM lunchorders WHERE student_id = 100;
Örnek
İki alanı sorgulamak için şöyle yaparız. Burada order_details altındaki sides dizisi fluent olarak sorgulanıyor
SELECT orders -> 'order_date', orders-> 'order_details' -> 'sides' FROM lunchorders WHERE student_id = 100;
Eğer sides dizisinin ilk elemanını istersek şöyle yaparız
SELECT orders -> 'order_date', orders-> 'order_details' -> 'sides' -> 0 FROM lunchorders WHERE student_id = 100;
2. ->> Filter Query Results - Nesnenin Alanına Erişir WHERE Cümlesinde Kullanılabilir
->> Operator - Filter Query Results yazısına taşıdım
4. #>> Filter Query Results In a Nested Object
Açıklaması şöyle
#>> operator that extracts the JSON sub-object at the specified path as text
Açıklaması şöyle
The jsonb_extract_path_text is a Postgres function that is equivalent to the #>> operator
Şöyle yaparız
private EntityManager entityManager;
public List<Item> findAll(String expression) {
return entityManager
.createNativeQuery("SELECT * FROM item i WHERE "
+ "i.jsonb_content#>>'{string_value}' LIKE '"
+ expression + "'", Item.class)
.getResultList();
}
Aynı şey SQL ile şöyledir
select item0_.jsonb_content as jsonb_co2_0_
from item item0_
where jsonb_extract_path_text(item0_.jsonb_content,?) like ?
5. @> Check If an Object Contains a Value
WHERE cümlesinde Array tipler için kullanılır
Örnek
Şöyle yaparız
ÖrnekSELECT orders FROM lunchordersWHERE orders -> 'order_details' -> 'sides' @> '["salad"]';orders----------{"order_date": "2020-12-12", "order_details": {"cost": 4.89, "sides": ["apple", "salad"],
"entree": ["hamburger"], "snacks": ["cookie"]}}(1 row)
Şöyle yaparız.
SELECT * FROM books_data WHERE data @> '{"author" : "Mark Figueroa"}';
Hiç yorum yok:
Yorum Gönder