Bekerja dengan JSON di Azure Cosmos DB untuk NoSQL
BERLAKU UNTUK: NoSQL
Di Azure Cosmos DB untuk NoSQL, item disimpan sebagai JSON. Sistem jenis dan ekspresi dibatasi hanya untuk menangani jenis JSON. Untuk informasi selengkapnya, lihat spesifikasi JSON.
Kami meringkas beberapa aspek penting dalam bekerja dengan JSON:
- Objek JavaScript Object Notation selalu dimulai dengan penjepit
{
kiri dan diakhiri dengan penjepit}
kanan - Anda dapat memiliki properti JavaScript Object Notation yang berlapis dalam satu sama lain
- Nilai properti JavaScript Object Notation bisa menjadi array
- Nama properti JavaScript Object Notation peka huruf besar/kecil
- Nama properti JavaScript Object Notation bisa menjadi nilai string apa pun (termasuk spasi atau karakter yang bukan huruf)
Properti berlapis
Anda dapat mengakses JSON berlapis menggunakan aksesor titik (.
). Anda dapat menggunakan properti JavaScript Object Notation berlapis dalam kueri Anda dengan cara yang sama seperti Anda dapat menggunakan properti lain.
Berikut adalah dokumen dengan JavaScript Object Notation berlapis:
{
"name": "Teapo rainbow surfboard",
"manufacturer": {
"name": "AdventureWorks"
},
"releaseDate": null,
"metadata": {
"sku": "72109",
"colors": [
"cruise",
"picton-blue"
],
"sizes": {
"small": {
"inches": 76,
"feet": 6.33333
},
"large": {
"inches": 92,
"feet": 7.66667
}
}
}
}
Dalam hal ini, sku
,colors
, dan sizes
properti semuanya berlapis di dalam metadata
properti. Properti name
ini juga bersarang di manufacturer
dalam properti.
Contoh pertama ini memproyeksikan tiga properti berlapis.
SELECT
p.manufacturer.name,
p.metadata.sku,
p.metadata.sizes.small.inches AS size
FROM
products p
[
{
"name": "AdventureWorks",
"sku": "72109",
"size": 76
}
]
Bekerja dengan array
Selain properti berlapis, JavaScript Object Notation juga mendukung array. Saat bekerja dengan array, Anda dapat mengakses elemen tertentu dalam array dengan mereferensikan posisinya.
Contoh ini mengakses elemen array pada posisi tertentu.
SELECT
p.name,
p.metadata.colors
FROM
products p
WHERE
p.metadata.colors[0] NOT LIKE "%orange%"
[
{
"name": "Teapo rainbow surfboard",
"colors": [
"cruise",
"picton-blue"
]
}
]
Namun, dalam kebanyakan kasus, Anda menggunakan subkueri atau gabungan mandiri saat bekerja dengan array.
Misalnya, berikut adalah kueri yang mengembalikan beberapa permutasi menggunakan nilai array potensial dan gabungan silang,
SELECT
p.name,
c AS color
FROM
products p
JOIN
c IN p.metadata.colors
[
{
"name": "Teapo rainbow surfboard",
"color": "cruise"
},
{
"name": "Teapo rainbow surfboard",
"color": "picton-blue"
}
]
Sebagai contoh lain, kueri juga dapat digunakan EXISTS
dengan subkueri.
SELECT VALUE
p.name
FROM
products p
WHERE
EXISTS (SELECT VALUE
c
FROM
c IN p.metadata.colors
WHERE
c LIKE "%picton%")
[
"Teapo rainbow surfboard"
]
Perbedaan antara null dan tidak terdefinisi
Jika properti tidak ditentukan dalam item, maka nilainya adalah undefined
. Properti dengan nilai null
harus didefinisikan secara eksplisit dan diberi null
nilai.
Azure Cosmos DB for NoSQL mendukung dua fungsi sistem pemeriksaan jenis yang bermanfaat untuk null
undefined
dan properti:
IS_NULL
- memeriksa apakah nilai properti adalahnull
.IS_DEFINED
- memeriksa apakah nilai properti ditentukan atauundefined
.
Berikut adalah contoh kueri yang memeriksa dua bidang pada setiap item dalam kontainer.
SELECT
IS_NULL(p.releaseDate) AS isReleaseDateNull,
IS_DEFINED(p.releaseDate) AS isReleaseDateDefined,
IS_NULL(p.retirementDate) AS isRetirementDateNull,
IS_DEFINED(p.retirementDate) AS isRetirementDateDefined
FROM
products p
[
{
"isReleaseDateNull": true,
"isReleaseDateDefined": true,
"isRetirementDateNull": false,
"isRetirementDateDefined": false
}
]
Untuk informasi selengkapnya tentang operator umum dan perilakunya untuk null
nilai dan undefined
, lihat operator kesetaraan dan perbandingan.
Kata kunci yang dipesan dan karakter khusus di JavaScript Object Notation
Anda dapat mengakses properti menggunakan operator properti yang dikutip []
. Misalnya, SELECT c.grade
dan SELECT c["grade"]
setara. Sintaks ini berguna untuk melarikan diri dari properti yang berisi spasi, karakter khusus, atau memiliki nama yang sama dengan kata kunci SQL atau kata yang dipesan.
Misalnya, berikut adalah kueri yang mereferensikan properti dengan beberapa cara berbeda.
SELECT
p.manufacturer.name AS dotNotationReference,
p["manufacturer"]["name"] AS bracketReference,
p.manufacturer["name"] AS mixedReference
FROM
products p
[
{
"dotNotationReference": "AdventureWorks",
"bracketReference": "AdventureWorks",
"mixedReference": "AdventureWorks"
}
]
Ekspresi JSON
Proyeksi kueri mendukung ekspresi dan sintaks JSON.
SELECT {
"productName": p.name,
"largeSizeInFeet": p.metadata.sizes.large.feet
}
FROM
products p
[
{
"$1": {
"productName": "Teapo rainbow surfboard",
"largeSizeInFeet": 7.66667
}
}
]
Dalam contoh ini, SELECT
klausul membuat objek JSON. Karena sampel tidak menyediakan kunci, klausul menggunakan nama $<index-number>
variabel argumen implisit .
Contoh ini secara eksplisit menamai bidang yang sama.
SELECT {
"productName": p.name,
"largeSizeInFeet": p.metadata.sizes.large.feet
} AS product
FROM
products p
[
{
"product": {
"productName": "Teapo rainbow surfboard",
"largeSizeInFeet": 7.66667
}
}
]
Atau, kueri dapat meratakan objek untuk menghindari penamaan bidang redundan.
SELECT VALUE {
"productName": p.name,
"largeSizeInFeet": p.metadata.sizes.large.feet
}
FROM
products p
[
{
"productName": "Teapo rainbow surfboard",
"largeSizeInFeet": 7.66667
}
]
Nilai alias
Anda dapat secara eksplisit membuat alias nilai dalam kueri. Jika kueri memiliki dua properti dengan nama yang sama, gunakan alias untuk mengganti nama salah satu atau kedua properti agar tidak ambigu dalam hasil yang diproyeksikan.
Contoh
Kata AS
kunci yang digunakan untuk alias bersifat opsional, seperti yang ditunjukkan dalam contoh berikut.
SELECT
p.name,
p.metadata.sku AS modelNumber
FROM
products p
[
{
"name": "Teapo rainbow surfboard",
"modelNumber": "72109"
}
]
Nilai alias dengan kata kunci yang dipesan atau karakter khusus
Anda tidak dapat menggunakan alias untuk memproyeksikan nilai sebagai nama properti dengan spasi, karakter khusus, atau kata yang dipesan. Jika Anda ingin mengubah proyeksi nilai menjadi, misalnya, memiliki nama properti dengan spasi, Anda bisa menggunakan ekspresi JSON.
Berikut contohnya:
SELECT VALUE {
"Product's name | ": p.name,
"Model number => ": p.metadata.sku
}
FROM
products p
[
{
"Product's name | ": "Teapo rainbow surfboard",
"Model number => ": "72109"
}
]