MariaDB
 sql >> Teknologi Basis Data >  >> RDS >> MariaDB

Bagaimana Langkah Wildcard JSONPath (**) Bekerja di MariaDB

Saat bekerja dengan JSON di MariaDB, Anda dapat menggunakan ekspresi JSONPath untuk memanipulasi data dalam dokumen JSON.

Salah satu fitur canggih yang disediakan MariaDB adalah langkah wildcard (** ). Ini memungkinkan Anda untuk memilih semua elemen turunan dari elemen saat ini secara rekursif.

Langkah wildcard adalah ekstensi non-standar, dan juga didukung dengan arti yang sama di MySQL.

Contoh

Berikut ini contoh untuk didemonstrasikan:

SET @json = '[
    { "name" : "Wag", "type" : "Dog" },
    { "name" : "Bark", "type" : "Dog" },
    { "name" : "Meow", "type" : "Cat" },
    { "name" : "Scratch", "type" : "Cat" }
]';

SELECT JSON_EXTRACT(@json, '$**.name');

Hasil:

+------------------------------------+
| JSON_EXTRACT(@json, '$**.name')    |
+------------------------------------+
| ["Wag", "Bark", "Meow", "Scratch"] |
+------------------------------------+

Langkah wildcard melewati semua objek dan memilih nilai dari name anggota.

Dalam hal ini, kami dapat mencapai hasil yang sama dengan pemilih lain. Pemilih wildcard array akan membantu kami mendapatkan hasil yang sama:

SET @json = '[
    { "name" : "Wag", "type" : "Dog" },
    { "name" : "Bark", "type" : "Dog" },
    { "name" : "Meow", "type" : "Cat" },
    { "name" : "Scratch", "type" : "Cat" }
]';

SELECT JSON_EXTRACT(@json, '$[*].name');

Hasil:

+------------------------------------+
| JSON_EXTRACT(@json, '$[*].name')   |
+------------------------------------+
| ["Wag", "Bark", "Meow", "Scratch"] |
+------------------------------------+

Hasil yang sama.

Namun, hal-hal berubah jika kita menggunakan dokumen yang berbeda.

Contoh 2

Dalam contoh berikut, kita mendapatkan hasil yang berbeda antara langkah wildcard dan pemilih array:

SET @json = '[
    { 
        "name" : "Homer", 
        "pets" : [
            { 
            "name" : "Wag",
            "type" : "Dog"
            },
            { 
            "name" : "Scratch",
            "type" : "Cat"
            }
        ]    
    }
]';

SELECT 
    JSON_EXTRACT(@json, '$**.name'),
    JSON_EXTRACT(@json, '$[*].name');

Hasil:

+---------------------------------+----------------------------------+
| JSON_EXTRACT(@json, '$**.name') | JSON_EXTRACT(@json, '$[*].name') |
+---------------------------------+----------------------------------+
| ["Homer", "Wag", "Scratch"]     | ["Homer"]                        |
+---------------------------------+----------------------------------+

Hasil yang berbeda.

Hasilnya jelas akan bergantung pada dokumen dan konstruksi sebenarnya dari ekspresi JSONPath, dan pemilih yang digunakan akan bergantung pada kebutuhan Anda.

Satu hal yang perlu diingat adalah bahwa langkah wildcard tidak boleh menjadi langkah terakhir dalam ekspresi JSONPath. Itu harus diikuti oleh langkah pemilih anggota array atau objek.

Contoh 3

Berikut adalah contoh yang mengembalikan elemen larik kedua dari semua larik yang disebut sizes , termasuk larik yang bersarang di dalam dokumen lain:

SET @json = '[
    { 
        "_id": 1, 
        "product": { 
            "name" : "Tuxedo", 
            "color" : "Blue",
            "sizes": [ "S", "M", "L" ],
            "accessories" : {
                "belt" : {
                    "color" : "Navy",
                    "sizes" : [ "Wide", "Narrow" ]
                },
                "tie" : {
                    "color" : "Black",
                    "sizes" : [ "Short", "Medium", "Long" ]
                }
            }
        }
    }
]';

SELECT JSON_EXTRACT(@json, '$**.sizes[1]');

Hasil:

+-------------------------------------+
| JSON_EXTRACT(@json, '$**.sizes[1]') |
+-------------------------------------+
| ["M", "Narrow", "Medium"]           |
+-------------------------------------+

Array berbasis nol dan karenanya $**.sizes[1] mengacu pada elemen kedua dalam semua sizes array.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Manajemen Pengguna Basis Data:Mengelola Peran untuk MariaDB

  2. 4 Cara Mendapatkan Kumpulan Database di MariaDB

  3. Cara Membandingkan Kinerja MySQL &MariaDB Menggunakan SysBench

  4. Bagaimana TIMESTAMPADD() Bekerja di MariaDB

  5. Membangun Hot Standby di Amazon AWS Menggunakan MariaDB Cluster