عبارة FROM (استعلام NoSQL)
ينطبق على: NoSQL
عبارة FROM ( FROM <from_specification>
) اختيارية، ما لم يتم تصفية المصدر أو عرضها لاحقا في الاستعلام. يتم تعداد استعلام مثل SELECT * FROM products
عبر حاوية بأكملها بغض النظر عن الاسم. يمكنك أيضا استخدام المعرف ROOT
الخاص للحاوية بدلا من استخدام اسم الحاوية.
تفرض العبارة FROM
القواعد التالية لكل استعلام:
- يمكن أن يكون اسم الحاوية اسما مستعاراً، مثل
SELECT p.id FROM products AS p
أو ببساطةSELECT p.id FROM products p
. هنا،p
هو الاسم المستعار للحاوية. لا تحتاج الحاوية بالضرورة إلى تسميةproducts
أوp
.AS
هي كلمة أساسية اختيارية للاسم المستعار للمعرف. - بمجرد الاسم المستعار، لا يمكن ربط اسم المصدر الأصلي. على سبيل المثال،
SELECT products.id FROM products p
غير صالح من الناحية النحوية لأن المعرفproducts
تم تسميته باسم مستعار ولا يمكن تغييره بعد الآن. - يجب أن تكون جميع الخصائص المشار إليها مؤهلة بالكامل لتجنب أي ارتباطات غامضة في حالة عدم الالتزام بالمخطط. على سبيل المثال،
SELECT id FROM products p
غير صالحة من ناحية بناء الجملة لأن الخاصيةid
غير مرتبطة. يجب أن يشير الاستعلام بدلا من ذلك إلى الخاصيةid
باستخدامp.id
(أو<alias>.<property-name>
).
بناء الجملة
FROM <from_specification>
<from_specification> ::=
<from_source> {[ JOIN <from_source>][,...n]}
<from_source> ::=
<container_expression> [[AS] input_alias]
| input_alias IN <container_expression>
<container_expression> ::=
ROOT
| container_name
| input_alias
| <container_expression> '.' property_name
| <container_expression> '[' "property_name" | array_index ']'
الوسيطات
الوصف | |
---|---|
<from_source> |
تحديد مصدر بيانات، مع أو دون اسم مستعار. إذا لم يتم تحديد الاسم المستعار، يتم استنتاجه من <container_expression> استخدام القواعد التالية. إذا كان التعبير هو container_name ، container_name استخدامه ك اسم مستعار. إذا كان التعبير هو <container_expression> ، property_name استخدامه ك اسم مستعار. إذا كان التعبير هو container_name ، container_name استخدامه ك اسم مستعار. |
مثل input_alias |
تحديد أن input_alias عبارة عن مجموعة من القيم التي يتم إرجاعها بواسطة تعبير الحاوية الأساسي. |
input_alias في |
يحدد أن input_alias يجب أن يمثل مجموعة القيم التي تم الحصول عليها عن طريق التكرار على جميع عناصر الصفيف لكل صفيف تُرجع بواسطة تعبير الحاوية الأساسي. يتم تجاهل أي قيمة يتم إرجاعها بواسطة تعبير الحاوية الأساسي الذي ليس صفيفا. |
<container_expression> |
تحديد تعبير الحاوية الذي سيتم استخدامه لاسترداد العناصر. |
ROOT |
يحدد أنه يجب استرداد العنصر من الحاوية الافتراضية المتصلة حاليا. |
container_name |
يحدد أنه يجب استرداد العنصر من الحاوية المتوفرة. يجب أن يتطابق اسم الحاوية مع اسم الحاوية المتصلة حالياً. |
input_alias |
يحدد أنه يجب استرداد العنصر من المصدر الآخر المحدد بواسطة الاسم المستعار المتوفر. |
<container_expression> '.' property_name |
يحدد أنه يجب استرداد العنصر عن طريق الوصول إلى الخاصية property_name . |
<container_expression> '[' "property_name" \| array_index ']' |
يحدد أنه يجب استرداد العنصر عن طريق الوصول إلى الخاصية property_name أو array_index عنصر الصفيف لكافة العناصر التي تم استردادها بواسطة تعبير حاوية محدد. |
الملاحظات
يجب أن تكون جميع الأسماء المستعارة المقدمة أو المستنتجة في <from_source>
(الأسماء) فريدة. بناء الجملة لـ <container_expression> '.' property_name
هو نفس <container_expression> '[' "property_name" ']'
. ومع ذلك، يمكن استخدام بناء الجملة الأخير إذا كان اسم الخاصية يحتوي على حرف غير معرف.
معالجة الخصائص المفقودة وعناصر الصفيف المفقودة والقيم غير المعرفة
إذا كان تعبير الحاوية يصل إلى خصائص أو عناصر صفيف ولم تكن هذه القيمة موجودة، يتم تجاهل هذه القيمة وعدم معالجتها بشكل أكبر.
نطاق سياق تعبير الحاوية
قد يكون تعبير الحاوية محددا في نطاق الحاوية أو نطاق العنصر:
يكون التعبير في نطاق الحاوية، إذا كان المصدر الأساسي لتعبير الحاوية إما
ROOT
أوcontainer_name
. يمثل هذا التعبير مجموعة من العناصر التي تم استردادها من الحاوية مباشرة، ولا يعتمد على معالجة تعبيرات الحاوية الأخرى.يكون التعبير في نطاق العنصر، إذا تم تقديم المصدر الأساسي لتعبير
input_alias
الحاوية مسبقا في الاستعلام. يمثل هذا التعبير مجموعة من العناصر التي تم الحصول عليها عن طريق تقييم تعبير الحاوية. يتم تنفيذ هذا التقييم في نطاق كل عنصر ينتمي إلى المجموعة المقترنة بالحاوية المستعارة. المجموعة الناتجة هي اتحاد مجموعات تم الحصول عليها عن طريق تقييم تعبير الحاوية لكل عنصر من العناصر في المجموعة الأساسية.
الأمثلة
في هذا المثال الأول، FROM
يتم استخدام عبارة لتحديد الحاوية الحالية كمصدر، وإعطائها اسما فريدا، ثم تسميتها بالاسم المستعار. ثم يتم استخدام الاسم المستعار لعرض حقول معينة في نتائج الاستعلام.
SELECT VALUE {
name: e.name,
location: e.workLocation
}
FROM
employees e
[
{
"name": "Tijana Stanković",
"location": {
"office": "Redmond, WA"
}
},
{
"name": "Jean Nadeau",
"location": {
"type": "Remote"
}
}
]
في هذا المثال التالي، يمكن أن تقلل العبارة FROM
أيضا المصدر إلى مجموعة فرعية أصغر. لتعداد شجرة فرعية فقط في كل عنصر، يمكن أن يصبح الجزء الفرعي المصدر. يمكن استخدام صفيف أو عنصر فرعي كمصدر.
SELECT
*
FROM
employees.employment e
[
{
"hireDateTime": "2023-01-01T06:30:00.000Z",
"weeklyHours": 40,
"team": "Retail support"
},
{
"hireDateTime": "2023-01-01T09:30:00.000Z",
"team": "Retail support"
},
{
"hireDateTime": "2023-01-01T15:30:00.000Z",
"weeklyHours": 32,
"team": "Retail support"
}
]