العمل مع JSON في Azure Cosmos DB ل NoSQL
ينطبق على: NoSQL
في Azure Cosmos DB ل NoSQL، يتم تخزين العناصر ك JSON. يقتصر نظام الكتابة والتعبيرات على التعامل مع أنواع JSON فقط. لمزيد من المعلومات، راجع مواصفات JSON.
نلخص بعض الجوانب المهمة للعمل مع JSON:
- تبدأ عناصر JSON دائما
{
بقوس أيسر وتنتهي}
بقوس أيمن - يمكنك الحصول على خصائص JSON المتداخلة داخل بعضها
- يمكن أن تكون قيم خاصية JSON مصفوفات
- أسماء خصائص JSON حساسة في حالة الأحرف
- يمكن أن يكون اسم خاصية JSON أي قيمة سلسلة (بما في ذلك المسافات أو الأحرف التي ليست أحرفًا)
الخصائص المتداخلة
يمكنك الوصول إلى JSON المتداخل باستخدام ملحق نقطة (.
). يمكنك استخدام خصائص JSON المتداخلة في الاستعلامات بنفس الطريقة التي يمكنك استخدام بها أي خصائص أخرى.
فيما يلي مستند مع JSON المتداخلة:
{
"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
}
}
}
}
في هذه الحالة، sku
، وcolors
وsizes
يتم تداخل جميع الخصائص داخل الخاصيةmetadata
. كما name
أن الخاصية متداخلة داخل الخاصية manufacturer
.
يعرض هذا المثال الأول ثلاث خصائص متداخلة.
SELECT
p.manufacturer.name,
p.metadata.sku,
p.metadata.sizes.small.inches AS size
FROM
products p
[
{
"name": "AdventureWorks",
"sku": "72109",
"size": 76
}
]
العمل مع المصفوفات
بالإضافة إلى الخصائص المتداخلة، يدعم JSON أيضًا المصفوفات. عند العمل مع الصفائف، يمكنك الوصول إلى عنصر معين داخل الصفيف عن طريق الرجوع إلى موضعه.
يصل هذا المثال إلى عنصر صفيف في موضع معين.
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"
]
}
]
ومع ذلك، في معظم الحالات، يمكنك استخدام استعلام فرعي أو صلة ذاتية عند العمل مع الصفائف.
على سبيل المثال، إليك استعلام يقوم بإرجاع تباديل متعددة باستخدام قيم الصفيف المحتملة وربط متقاطع،
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"
}
]
كمثال آخر، يمكن أن يستخدم EXISTS
الاستعلام أيضا مع استعلام فرعي.
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"
]
الفرق بين خالٍ وغير معرف
إذا لم يتم تعريف خاصية في عنصر، فإن قيمتها هي undefined
. يجب تعريف الخاصية ذات القيمة null
بشكل مُحدد وتعيين null
قيمة.
يدعم Azure Cosmos DB ل NoSQL اثنين من وظائف نظام التحقق من النوع المفيدة ل null
وخصائص undefined
:
IS_NULL
- يتحقق ما إذا كانت قيمة الخاصية هيnull
.IS_DEFINED
- يتحقق من تحديد قيمة خاصية أوundefined
.
فيما يلي مثال استعلام يتحقق من وجود حقلين على كل عنصر في الحاوية.
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
}
]
لمزيد من المعلومات حول عوامل التشغيل الشائعة وسلوكها ل null
undefined
وقيمها، راجع عوامل تشغيل المساواة والمقارنة.
الكلمات الأساسية المحفوظة والأحرف الخاصة في JSON
يمكنك الوصول إلى الخصائص باستخدام عامل تشغيل الخاصية المعروض []
. على سبيل المثال، SELECT c.grade
وSELECT c["grade"]
مكافئان. بناء الجملة هذا مفيد للهروب وهي خاصية تحتوي على مسافات أو أحرف خاصة أو لها نفس الاسم ككلمة أساسية في لغة الاستعلامات المركبة أو الكلمة المحفوظة.
على سبيل المثال، إليك استعلام يشير إلى خاصية بعدة طرق مميزة.
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"
}
]
تعبيرات JSON
يدعم إسقاط الاستعلام تعبيرات JSON وبناء الجملة.
SELECT {
"productName": p.name,
"largeSizeInFeet": p.metadata.sizes.large.feet
}
FROM
products p
[
{
"$1": {
"productName": "Teapo rainbow surfboard",
"largeSizeInFeet": 7.66667
}
}
]
في هذا المثال، تقوم العبارة SELECT
بإنشاء كائن JSON. نظرا لأن النموذج لا يوفر مفتاحا، تستخدم العبارة اسم $<index-number>
متغير الوسيطة الضمني .
يسمي هذا المثال الحقل نفسه بشكل صريح.
SELECT {
"productName": p.name,
"largeSizeInFeet": p.metadata.sizes.large.feet
} AS product
FROM
products p
[
{
"product": {
"productName": "Teapo rainbow surfboard",
"largeSizeInFeet": 7.66667
}
}
]
بدلا من ذلك، يمكن للاستعلام تسوية الكائن لتجنب تسمية حقل زائد عن الحاجة.
SELECT VALUE {
"productName": p.name,
"largeSizeInFeet": p.metadata.sizes.large.feet
}
FROM
products p
[
{
"productName": "Teapo rainbow surfboard",
"largeSizeInFeet": 7.66667
}
]
قيم الاسم المستعار
يمكنك استخدام الاسم المستعار للقيم في الاستعلامات بوضوح. إذا كان الاستعلام يحتوي على خاصيتين بنفس الاسم، استخدم الاسم المستعار لإعادة تسمية أحد الخصائص أو كليهما بحيث يتم توضيحهما في النتيجة المتوقعة.
الأمثلة
AS
الكلمة الأساسية المستخدمة في الاسم المستعار اختيارية، كما هو موضح في المثال التالي.
SELECT
p.name,
p.metadata.sku AS modelNumber
FROM
products p
[
{
"name": "Teapo rainbow surfboard",
"modelNumber": "72109"
}
]
قيم الاسم المستعار مع كلمات أساسية محجوزة أو أحرف خاصة
لا يمكنك استخدام الاسم المستعار لإسقاط قيمة كاسم خاصية مع مسافة أو حرف خاص أو كلمة محفوظة. إذا أردت تغيير إسقاط قيمة ما، على سبيل المثال، إلي اسم خاصية مع مسافة، يمكنك استخدام تعبير JSON.
إليك مثال:
SELECT VALUE {
"Product's name | ": p.name,
"Model number => ": p.metadata.sku
}
FROM
products p
[
{
"Product's name | ": "Teapo rainbow surfboard",
"Model number => ": "72109"
}
]