تنفيذ الاستعلامات في SDK
تحتوي فئة Microsoft.Azure.Cosmos.Container في SDK على سلسلة من الفئات المضمنة لإنشاء استعلام، وإصدار الاستعلام إلى Azure Cosmos DB ل NoSQL، وإعداد دفق غير متزامن في C#، وإرجاع العناصر بكفاءة مرة أخرى إلى العميل.
للبدء، دعونا نستخدم أمر SQL مباشر يُرجع جميع المنتجات:
SELECT * FROM products p
سيستخدم تعريف الأمر المكافئ في C# فئة QueryDefinition:
QueryDefinition query = new ("SELECT * FROM products p");
أولا، حدد نوع C# لتمثيل نوع العنصر الذي تستعلمه، لهذا المثال، تكفي فئة C# بسيطة Product:
public class Product
{
public string id { get; set; }
public string name { get; set; }
public string price { get; set; }
}
استخدم بعد ذلك الأسلوب العام GetItemQueryIterator بنوع C# Product في التكرار الحلقي انتظار foreach. تعالج بنية الدفق غير المتزامن تلقائيا التكرار الحلقي وفصل الصفحات للانتقال إلى الخادم والحصول على كل صفحة من النتائج اللاحقة. أضف الكود الخاص بك في كل تكرار حلقي foreach للتعامل مع كل عنصر، يكون، في هذا المثال، معرّفواسموسعر كل عنصر مُخرجا لوحدة التحكم:
using (FeedIterator<Product> feedIterator = this.Container.GetItemQueryIterator<Product>(
query,
null,
new QueryRequestOptions() { }))
{
while (feedIterator.HasMoreResults)
{
foreach(var item in await feedIterator.ReadNextAsync())
{
Console.WriteLine($"[{item.productid}]\t{item.name,35}\t{item.price,15:C}");
}
}
}
يوفر azure-cosmos Python SDK أساليب فعالة للاستعلام عن البيانات باستخدام بناء الجملة الشبيه ب SQL ومعالجة ترقيم الصفحات وتدفق النتائج مرة أخرى إلى العميل.
للبدء، دعونا نستخدم أمر SQL مباشر يُرجع جميع المنتجات:
SELECT * FROM products p
في Python، يمكن تمرير هذا الاستعلام مباشرة كسلسلة إلى أسلوب query_items.
تعريف قاموس Python لتمثيل بنية العناصر الخاصة بك. على سبيل المثال، ضع في اعتبارك بنية منتج مثل هذا:
product = {
"id": "string",
"name": "string",
"price": "string"
}
بعد ذلك، استخدم أسلوب query_items. يقبل الأسلوب سلسلة استعلام SQL وخيارات مفتاح القسم والتكوينات الأخرى. يتم دفق النتائج بكفاءة باستخدام حلقة. ضمن التكرار الحلقي، أضف التعليمات البرمجية للتعامل مع كل عنصر؛ في هذا المثال، معرف لكل عنصر، واسم ، ويتم إخراج السعر إلى وحدة التحكم:
query = "SELECT * FROM products p"
for item in container.query_items(
query=query,
enable_cross_partition_query=True):
print(f"{item['id']}\t{item['name']}\t{item['price']}")
يسمح لك JavaScript SDK بإنشاء استعلام، وإصدار الاستعلام إلى Azure Cosmos DB ل NoSQL، وإعداد دفق غير متزامن في JavaScript، وإرجاع العناصر بكفاءة مرة أخرى إلى العميل.
للبدء، دعونا نستخدم أمر SQL مباشر يُرجع جميع المنتجات:
SELECT * FROM products p
لتنفيذ هذا الاستعلام باستخدام JavaScript SDK، قم بإنشاء كائن QuerySpec أو استخدم سلسلة استعلام. فيما يلي كيفية تعريف سلسلة الاستعلام في التعليمات البرمجية الخاصة بك:
const query = "SELECT * FROM products p";
للتعامل المنظم لنتائج الاستعلام، يمكنك تعريف فئة JavaScript تمثل بيانات Product:
class Product {
constructor(id, name, price) {
this.id = id;
this.name = name;
this.price = price;
}
}
بعد ذلك، استخدم أسلوب الاستعلام لإنشاء مثيل لفئة QueryIterator. يقبل الأسلوب سلسلة استعلام SQL وخيارات مفتاح القسم والتكوينات الأخرى. تعالج بنية الدفق غير المتزامن تلقائيا التكرار الحلقي وفصل الصفحات للانتقال إلى الخادم والحصول على كل صفحة من النتائج اللاحقة. ضمن التكرار الحلقي، أضف التعليمات البرمجية للتعامل مع كل عنصر؛ في هذا المثال، معرف لكل عنصر، واسم ، ويتم إخراج السعر إلى وحدة التحكم:
const iterator = container.items.query(
query,
{ enableCrossPartitionQuery: true }
);
while (iterator.hasMoreResults()) {
const { resources } = await iterator.fetchNext();
for (const item of resources) {
console.log(`[${item.id}] ${item.name.padEnd(35)} ${item.price.toFixed(2)}`);
}
}
إذا كنت تفضل استخدام فئة Product لتمثيل العناصر الخاصة بك، يمكنك استخدام التعليمات البرمجية التالية:
const iterator = container.items.query(
query,
{ enableCrossPartitionQuery: true }
);
while (iterator.hasMoreResults()) {
const { resources } = await iterator.fetchNext();
// Bind the results to the Product class.
const products = resources.map((product) => {
return new Product(product.id, product.name, 0);
});
}