TairDoc merupakan struktur data dokumen yang mirip dengan RedisJSON, memungkinkan Anda melakukan operasi Membuat, Membaca, Memperbarui, dan Menghapus (CRUD).
Ikhtisar
Fitur Utama
Sepenuhnya mendukung standar JSON.
Sebagian kompatibel dengan standar JSONPath RFC draft-4.
CatatanHanya perintah JSON.GET yang mendukung versi draf ini.
Sepenuhnya mendukung sintaks JSONPointer.
Penyimpanan data dalam struktur pohon biner untuk menyederhanakan pengambilan elemen anak.
Konversi format JSON ke XML atau YAML.
Catatan rilis
TairDoc diluncurkan bersama dengan instans optimasi memori Tair. TairDoc mendukung sintaks JSONPointer secara lengkap dan sebagian sintaks JSONPath (hanya perintah JSON.GET yang mendukung sintaks JSONPath).
Pada 17 Mei 2022, TairDoc V1.8.4 yang sepenuhnya mendukung sintaks JSONPath untuk perintah JSON.GET dirilis. Kami menyarankan Anda untuk memperbarui versi minor instans Anda ke 1.8.4 atau yang lebih baru.
TairDoc V1.8.4 juga mendukung pemilih spesifik seperti pemilih wildcard titik, pemilih indeks, dan pemilih filter.
Prasyarat
Instans Tair berbasis DRAM telah dibuat.
Versi minor terbaru menawarkan lebih banyak fitur dan stabilitas yang lebih baik. Kami merekomendasikan Anda untuk memperbarui instans ke versi minor terbaru. Untuk informasi lebih lanjut, lihat Perbarui versi minor sebuah instans. Jika instans Anda adalah kluster atau instans pemisahan baca/tulis, pastikan untuk memperbarui node proxy di dalam instans ke versi minor terbaru agar semua perintah dapat berjalan sesuai harapan.
Pertimbangan
Operasi ini dilakukan pada data TairDoc di dalam instans Tair.
Daftar perintah
Tabel 1. Perintah TairDoc
Perintah | Sintaks | Deskripsi |
| Membuat kunci TairDoc dan menyimpan elemen JSON di jalur kunci. Jika kunci dan jalur sudah ada, perintah ini memperbarui elemen di jalur kunci. | |
| Mengambil elemen JSON dari jalur kunci TairDoc. | |
| Menghapus elemen JSON dari jalur di kunci TairDoc. Jika jalur tidak ditentukan, kunci akan dihapus. Jika kunci atau jalur tidak ada, perintah ini diabaikan. | |
| Mengambil tipe elemen JSON di jalur kunci TairDoc. Tipe yang mungkin termasuk | |
| Menggabungkan nilai JSON ke jalur kunci yang ditentukan. Perintah ini memungkinkan Anda melakukan operasi seperti menambahkan nilai baru, memperbarui nilai yang ada, dan menghapus nilai di jalur yang ditentukan. | |
| Menambahkan nilai elemen JSON di jalur kunci TairDoc. Elemen dan nilai yang ingin Anda tambahkan ke elemen tersebut harus memiliki tipe data yang sama, yaitu integer atau double. | |
| Menambahkan nilai json-string ke elemen JSON di jalur kunci TairDoc. Nilai json-string dan elemen JSON harus bertipe string. | |
| Mengambil panjang string elemen JSON dari jalur kunci TairDoc. Elemen JSON harus bertipe string. | |
| Menambahkan satu atau lebih elemen JSON ke akhir array di jalur kunci TairDoc. | |
| Menghapus dan mengembalikan elemen yang cocok dengan indeks yang ditentukan dalam array jalur kunci TairDoc. | |
| Menyisipkan satu atau lebih elemen JSON ke dalam array di jalur sebelum indeks yang ditentukan di kunci TairDoc. | |
| Mengambil panjang array di jalur kunci TairDoc. | |
| Memotong array di jalur kunci TairDoc. Perintah ini mempertahankan elemen-elemen dalam array yang berada di antara nilai mulai dan nilai berhenti. | |
| Menghapus satu atau lebih kunci TairDoc. Ini adalah perintah asli Redis. |
Berikut adalah konvensi untuk sintaks perintah yang digunakan dalam topik ini:
KATA KUNCI HURUF BESAR: Menunjukkan kata kunci perintah.Teks miring: Menunjukkan variabel.[opsi]: Parameter di dalam tanda kurung siku bersifat opsional, sedangkan parameter tanpa tanda kurung siku wajib ditentukan.A|B: Parameter yang dipisahkan oleh batang vertikal (|) bersifat saling eksklusif; hanya satu dari parameter tersebut yang dapat ditentukan....: Parameter sebelum simbol ini dapat ditentukan secara berulang.
JSON.SET
Kategori | Deskripsi |
Sintaksis |
|
Kompleksitas waktu | O(N) |
Deskripsi perintah | Membuat kunci TairDoc dan menyimpan elemen JSON di jalur kunci. Jika kunci dan jalur sudah ada, perintah ini memperbarui elemen di jalur kunci. |
Opsi |
|
Nilai pengembalian |
|
Contoh | Perintah contoh: Tanggapan contoh: |
JSON.GET
Kategori | Deskripsi |
Sintaksis |
|
Kompleksitas waktu | O(N) |
Deskripsi perintah | Mengambil elemen JSON dari jalur kunci TairDoc. |
Opsi |
Catatan Parameter ROOTNAME dan ARRNAME hanya valid jika parameter FORMAT disetel ke XML. |
Nilai pengembalian |
|
Contoh | Jalankan perintah Perintah contoh: Tanggapan contoh: |
JSON.DEL
Kategori | Deskripsi |
Sintaksis |
|
Kompleksitas waktu | O(N) |
Deskripsi perintah | Menghapus elemen JSON dari path dalam kunci TairDoc. Jika path tidak ditentukan, kunci akan dihapus. Jika kunci atau path tidak ada, perintah ini diabaikan. |
Opsi |
|
Nilai kembali |
|
Contoh | Jalankan perintah Perintah contoh: Tanggapan contoh: |
JSON.TYPE
Kategori | Deskripsi |
Sintaksis |
|
Kompleksitas waktu | O(N) |
Deskripsi perintah | Mengambil tipe elemen JSON di jalur kunci TairDoc. Tipe yang mungkin termasuk |
Opsi |
|
Nilai pengembalian |
|
Contoh | Jalankan perintah Perintah contoh: Tanggapan contoh: |
JSON.MERGE
Kategori | Deskripsi |
Sintaksis |
|
Kompleksitas waktu | O(N) |
Deskripsi perintah | Menggabungkan nilai JSON ke dalam jalur dari kunci yang ditentukan. Perintah ini memungkinkan Anda melakukan operasi seperti menambahkan nilai baru, memperbarui nilai yang ada, dan menghapus nilai di jalur yang ditentukan. |
Opsi |
|
Nilai pengembalian |
|
Contoh | Jalankan perintah Perintah contoh: Tanggapan contoh: Setelah menjalankan perintah, hasil dari |
JSON.NUMINCRBY
Kategori | Deskripsi |
Sintaksis |
|
Kompleksitas waktu | O(N) |
Deskripsi perintah | Menambahkan nilai elemen JSON di jalur kunci TairDoc. Elemen dan nilai yang ingin ditambahkan ke elemen tersebut harus memiliki tipe data yang sama, yaitu integer atau double. |
Opsi |
|
Nilai pengembalian |
|
Contoh | Jalankan perintah Perintah contoh: Tanggapan contoh: |
JSON.STRAPPEND
Kategori | Deskripsi |
Sintaksis |
|
Kompleksitas waktu | O(N) |
Deskripsi perintah | Menambahkan nilai json-string ke elemen JSON di jalur kunci TairDoc. Nilai json-string dan elemen JSON keduanya harus bertipe string. |
Opsi |
|
Nilai kembali |
|
Contoh | Jalankan perintah Perintah contoh: Tanggapan contoh: |
JSON.STRLEN
Kategori | Deskripsi |
Sintaksis |
|
Kompleksitas waktu | O(N) |
Deskripsi perintah | Mengambil panjang string dari elemen JSON dari jalur kunci TairDoc. Elemen JSON harus bertipe string. |
Opsi |
|
Nilai balik |
|
Contoh | Jalankan perintah Perintah contoh: Tanggapan contoh: |
JSON.ARRAPPEND
Kategori | Deskripsi |
Sintaks |
|
Kompleksitas waktu | O(M×N), di mana M menentukan jumlah elemen JSON yang ingin Anda tambahkan dan N menentukan jumlah elemen dalam array. |
Deskripsi perintah | Menambahkan satu atau lebih elemen JSON ke akhir array pada jalur kunci TairDoc. |
Opsi |
|
Nilai pengembalian |
|
Contoh | Jalankan perintah Perintah contoh: Tanggapan contoh: |
JSON.ARRPOP
Kategori | Deskripsi |
Sintaksis |
|
Kompleksitas waktu | O(M×N), di mana M menentukan elemen anak dalam kunci dan N menentukan jumlah elemen dalam array. |
Deskripsi perintah | Menghapus dan mengembalikan elemen yang sesuai dengan indeks yang ditentukan dalam array dari jalur kunci TairDoc. |
Opsi |
|
Nilai pengembalian |
|
Contoh | Jalankan perintah Perintah contoh: Tanggapan contoh: |
JSON.ARRINSERT
Kategori | Deskripsi |
Sintaksis |
|
Kompleksitas waktu | O(M×N), di mana M menentukan jumlah elemen JSON yang ingin Anda sisipkan dan N menentukan jumlah elemen dalam array. |
Deskripsi perintah | Menyisipkan satu atau lebih elemen JSON ke dalam array pada jalur sebelum indeks yang ditentukan dalam kunci TairDoc. |
Opsi |
|
Nilai pengembalian |
|
Contoh | Jalankan perintah Perintah contoh: Tanggapan contoh: |
JSON.ARRLEN
Kategori | Deskripsi |
Sintaksis |
|
Kompleksitas waktu | O(N) |
Deskripsi perintah | Mengambil panjang array di jalur kunci TairDoc. |
Opsi |
|
Nilai pengembalian |
|
Contoh | Jalankan perintah Perintah contoh: Tanggapan contoh: |
JSON.ARRTRIM
Kategori | Deskripsi |
Sintaksis |
|
Kompleksitas waktu | O(N) |
Deskripsi perintah | Memotong array di jalur kunci TairDoc. Perintah ini mempertahankan elemen-elemen dalam array yang berada di antara nilai awal dan nilai akhir. |
Opsi |
|
Nilai kembali |
|
Contoh | Jalankan perintah Perintah contoh: Tanggapan contoh: |
JSONPath
TairDoc mendukung sintaks JSONPath yang kompatibel berikut:
JSONPath | Deskripsi |
$ | Elemen root. |
@ | Elemen saat ini. |
.name | Elemen anak. |
.. | Elemen yang memenuhi persyaratan posisi. |
* | Wildcard yang dapat mewakili semua elemen anak atau elemen array. |
None | Indeks array dimulai dari 0. Contoh: [0]. Elemen ini mendukung daftar dan nama elemen, seperti [0,1] dan ['nama']. |
[start:end:step] | Pemilih irisan array. Elemen diambil dari awal hingga akhir dengan penambahan langkah. Contohnya, [0:3:1] berarti elemen dipilih dari elemen ke-nol hingga elemen ketiga. Jika penambahan adalah -1, seperti pada [3:0:-1], elemen dipilih dari elemen ketiga kembali ke elemen ke-nol. |
?... | Filter Selector. |
() | Mendukung ekspresi dengan prioritas sebagai berikut: |
Contoh Kueri
Buat dokumen JSON.
Contoh perintah:
JSON.SET dockey $ '{ "store": { "book": [{ "category": "reference", "author": "Nigel Rees", "title": "Sayings of the Century", "price": 8.95 }, { "category": "fiction", "author": "Evelyn Waugh", "title": "Sword of Honour", "price": 12.99 }, { "category": "fiction", "author": "Herman Melville", "title": "Moby Dick", "isbn": "0-553-21311-3", "price": 8.99 }, { "category": "fiction", "author": "J. R. R. Tolkien", "title": "The Lord of the Rings", "isbn": "0-395-19395-8", "price": 22.99 } ], "bicycle": { "color": "red", "price": 19.95 } }, "expensive": 10 }'Hasil berikut diharapkan:
OKKueri dokumen.
Contoh kueri:
Pemilih root
# Kueri seluruh objek JSON. JSON.GET dockey $ # Output yang diharapkan: "[{"store":{"book":[{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95},{"category":"fiction","author":"Evelyn Waugh","title":"Sword of Honour","price":12.99},{"category":"fiction","author":"Herman Melville","title":"Moby Dick","isbn":"0-553-21311-3","price":8.99},{"category":"fiction","author":"J. R. R. Tolkien","title":"The Lord of the Rings","isbn":"0-395-19395-8","price":22.99}],"bicycle":{"color":"red","price":19.95}}}]"Pemilih titik
# Kueri semua informasi tentang sepeda di toko. JSON.GET dockey $.store.bicycle.* # Output yang diharapkan: "["red",19.95]" # Kueri harga sepeda. JSON.GET dockey $.store.bicycle.price # Output yang diharapkan: "[19.95]"Pemilih indeks
# Kueri semua informasi tentang buku pertama di toko. JSON.GET dockey $.store.book[0] # Output yang diharapkan: "[{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95}]" # Kueri judul semua buku di toko. JSON.GET dockey "$.store.book[*]['title']" # Output yang diharapkan: "["Sayings of the Century","Sword of Honour","Moby Dick","The Lord of the Rings"]"Pemilih irisan array
# Kueri semua informasi tentang buku pertama hingga ketiga di toko menggunakan pemotongan array dengan langkah 1. JSON.GET dockey $.store.book[0:2:1] # Output yang diharapkan: "[{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95},{"category":"fiction","author":"Herman Melville","title":"Moby Dick","isbn":"0-553-21311-3","price":8.99},{"category":"fiction","author":"Evelyn Waugh","title":"Sword of Honour","price":12.99}]"Pemilih turunan
# Kueri semua informasi harga di toko, termasuk harga buku dan sepeda. JSON.GET dockey $..price # Output yang diharapkan: "[8.95,12.99,8.99,22.99,19.95]"Pemilih daftar
# Kueri semua informasi tentang buku pertama dan ketiga di toko. JSON.GET dockey $.store.book[0,2] # Output yang diharapkan: "[{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95},{"category":"fiction","author":"Herman Melville","title":"Moby Dick","isbn":"0-553-21311-3","price":8.99}]"Pemilih filter
# Ekspresi @ # Kueri informasi tentang buku yang memiliki elemen isbn di toko. JSON.GET dockey $.store.book[?(@.isbn)] # Output yang diharapkan: "[{"category":"fiction","author":"Herman Melville","title":"Moby Dick","isbn":"0-553-21311-3","price":8.99},{"category":"fiction","author":"J. R. R. Tolkien","title":"The Lord of the Rings","isbn":"0-395-19395-8","price":22.99}]" # Ekspresi COMP. # Kueri informasi tentang buku yang harganya kurang dari 10. JSON.GET dockey '$.store.book[?(@.price < 10)]' # Output yang diharapkan: "[{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95},{"category":"fiction","author":"Herman Melville","title":"Moby Dick","isbn":"0-553-21311-3","price":8.99}]" # Ekspresi gabungan. # Kueri informasi tentang buku yang harganya sama dengan 12.99 atau lebih besar dari 19.95 atau nilai elemen kategori adalah referensi. JSON.GET dockey "$..book[?((@.price == 12.99 || @.price > $.store.bicycle.price) || @.category == 'reference')]" # Output yang diharapkan: "[{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95},{"category":"fiction","author":"J. R. R. Tolkien","title":"The Lord of the Rings","isbn":"0-395-19395-8","price":22.99},{"category":"fiction","author":"Evelyn Waugh","title":"Sword of Honour","price":12.99}]"
JSONPointer
TairDoc mendukung sintaks JSONPointer secara penuh. Untuk informasi lebih lanjut, lihat JavaScript Object Notation (JSON) Pointer.
Contoh berikut menunjukkan fungsionalitas ini.
Anda dapat menjalankan perintah JSON.SET doc . '{"foo": "bar", "baz" : [1,2,3]}' terlebih dahulu.
Perintah contoh:
# Mengambil nilai pertama dalam array .baz dari kunci doc.
JSON.GET doc /baz/0Tanggapan contoh:
"1"