عبارة 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"
  }
]