روابط Azure Cosmos DB لدالات Azure 1.x

توضح هذه المقالة كيفية العمل مع روابط AZURE Cosmos DB في دالات Azure. تدعم دالات Azure روابط المشغل والإدخال والإخراج لـ Azure Cosmos DB.

إشعار

هذه المقالة مخصصة لدالات Azure 1.x. للحصول على معلومات حول كيفية استخدام هذه الروابط في الدالات 2.x فالأحدث، راجع روابط Azure Cosmos DB لدالات Azure 2.x.

يُطلق على هذا الرابط في الأصل DocumentDB. في Azure Functions الإصدار 1.x، تمت إعادة تسمية المشغل فقط Azure Cosmos DB؛ يحتفظ ربط الإدخال وربط الإخراج وحزمة NuGet باسم DocumentDB.

إشعار

يتم دعم روابط Azure Cosmos DB للاستخدام مع API SQL فقط. بالنسبة لجميع واجهات برمجة تطبيقات Azure Cosmos DB الأخرى، يجب عليك الوصول إلى قاعدة البيانات من دالتك باستخدام العميل الثابت لواجهة برمجة التطبيقات الخاصة بك، بما في ذلك Azure Cosmos DB ل MongoDB وAzure Cosmos DB ل Apache Cassandra وAzure Cosmos DB ل Apache Gremlin وAzure Cosmos DB for Table.

الحزم - الدوال 1.x

يتم توفير روابط DB Cosmos Azure لدالات الإصدار 1.x في حزمة Microsoft.Azure.WebJobs.ExtensionsDocumentDB، الإصدار 1.x. التعليمات البرمجية المصدر للروابط موجودة في مستودع GitHub azure-webjobs-sdk-extensions.

يسرد الجدول التالي كيفية إضافة دعم ربط الإخراج في كل بيئة تطوير.

بيئة التطوير لإضافة دعم في Functions 1.x
التطوير المحلي: مكتبة فئات C#‎ تثبيت الحزمة
التطوير المحلي: برنامج C# النصي، JavaScript، F#‎ تلقائي
تطوير المدخل تلقائي

المشغِّل

يستخدم مشغل Azure Cosmos DB Triggerموجز تغيير Azure Cosmos DB للاستماع إلى الإدراجات والتحديثات عبر الأقسام. نشر موجز التغيير إدراج والتحديثات، وليس الحذف.

المشغل - مثال

يوضح المثال التالي دالة C# قيد المعالجة يتم استدعاؤها عند وجود إدراجات أو تحديثات في قاعدة البيانات والمجموعة المحددة.

using Microsoft.Azure.Documents;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using System.Collections.Generic;

namespace CosmosDBSamplesV1
{
    public static class CosmosTrigger
    {
        [FunctionName("CosmosTrigger")]
        public static void Run([CosmosDBTrigger(
            databaseName: "ToDoItems",
            collectionName: "Items",
            ConnectionStringSetting = "CosmosDBConnection",
            LeaseCollectionName = "leases",
            CreateLeaseCollectionIfNotExists = true)]IReadOnlyList<Document> documents,
            TraceWriter log)
        {
            if (documents != null && documents.Count > 0)
            {
                log.Info($"Documents modified: {documents.Count}");
                log.Info($"First document Id: {documents[0].Id}");
            }
        }
    }
}

المشغل - السمات

بالنسبة لمكتبات فئات C# قيد المعالجة، استخدم السمة CosmosDBTrigger .

الدالة الإنشائية للسمة تأخذ اسم قاعدة البيانات واسم المجموعة. للحصول على معلومات حول هذه الإعدادات والخصائص الأخرى التي يمكنك تكوينها، راجع المشغل - التكوين. فيما يلي CosmosDBTrigger مثال سمة في توقيع أسلوب:

    [FunctionName("DocumentUpdates")]
    public static void Run(
        [CosmosDBTrigger("database", "collection", ConnectionStringSetting = "myCosmosDB")]
    IReadOnlyList<Document> documents,
        TraceWriter log)
    {
        ...
    }

للحصول على مثال كامل، راجع المشغل - مثال C#‎.

المشغل - التكوين

يشرح الجدول التالي خصائص تكوين الرابط التي قمت بتعيينها في الملف function.json و CosmosDBTrigger السمة.

خاصية function.json خاصية السمة ‏‏الوصف
النوع غير متوفر يجب تعيينه إلى cosmosDBTrigger.
الاتجاه غير متوفر يجب تعيينه إلى in. يتم تعيين هذه المعلمة تلقائيًا عند إنشاء المشغل في مدخل Azure.
الاسم غير متوفر اسم المتغير المستخدم في رمز الدالة الذي يمثل قائمة المستندات ذات التغييرات.
connectionStringSetting ConnectionStringSetting اسم إعداد تطبيق يحتوي على سلسلة الاتصال المستخدمة للاتصال بحساب Azure Cosmos DB الذي تتم مراقبته.
databaseName DatabaseName اسم قاعدة بيانات Azure Cosmos DB مع المجموعة التي يتم مراقبتها.
collectionName CollectionName اسم المجموعة التي يتم مراقبتها.
leaseConnectionStringSetting LeaseConnectionStringSetting (اختياري) اسم إعداد تطبيق يحتوي على سلسلة الاتصال بالخدمة التي تحتوي على مجموعة التأجير. عند عدم التعيين، تُستخدم القيمة connectionStringSetting. يتم تعيين هذه المعلمة تلقائيًا عند إنشاء الربط في المدخل. يجب أن يكون لسلسلة الاتصال لمجموعة التأجير أذونات الكتابة.
leaseDatabaseName LeaseDatabaseName (اختياري) اسم قاعدة البيانات التي تحتوي على المجموعة المستخدمة لتخزين عقود الإيجار. عند عدم التعيين، تُستخدم قيمة الإعداد databaseName. يتم تعيين هذه المعلمة تلقائيًا عند إنشاء الربط في المدخل.
leaseCollectionName LeaseCollectionName (اختياري) اسم المجموعة المستخدمة لتخزين عقود الإيجار. عند عدم التعيين، تُستخدم القيمة leases.
createLeaseCollectionIfNotExists CreateLeaseCollectionIfNotExists (اختياري) عند تعيينها إلى true، يتم إنشاء مجموعة عقود الإيجار تلقائيًّا عندما لا تكون موجودة بالفعل. القيمة الافتراضية هي false.
leasesCollectionThroughput LeasesCollectionThroughput (اختياري) تحدد مقدار وحدات الطلب لتعيينها عند إنشاء مجموعة عقود الإيجار. يتم استخدام هذا الإعداد فقط عند تعيين createLeaseCollectionIfNotExists إلى true. يتم تعيين هذه المعلمة تلقائيا عند إنشاء الربط باستخدام المدخل.
leaseCollectionPrefix LeaseCollectionPrefix (اختياري) عند تعيينها، فإنها تضيف بادئة إلى عقود الإيجار التي تم إنشاؤها في مجموعة التأجير لهذه الدالة، مما يسمح بشكل فعال لدالتي Azure منفصلتين بمشاركة نفس مجموعة التأجير باستخدام بادئات مختلفة.
feedPollDelay FeedPollDelay (اختياري) عند تعيينها، فإنها تحدد بالمللي ثانية، التأخير بين الاستقصاء عن قسم للتغييرات الجديدة في الموجز، بعد أن يتم استنزاف كافة التغييرات الحالية. القيمة الافتراضية هي 5000 (5 ثوان).
leaseAcquireInterval LeaseAcquireInterval (اختياري) عند تعيينها، فإنه يعرف، في ميلي ثانية، الفاصل الزمني لبدء مهمة لحساب إذا تم توزيع الأقسام بالتساوي بين مثيلات المضيف المعروفة. الافتراضي هو 13000 (13 ثانية).
leaseExpirationInterval LeaseExpirationInterval (اختياري) عند تعيينها، تعرف، بالمللي ثانية، الفترة الزمنية التي يتم أخذ التأجير من أجلها على عقد إيجار يمثل قسمًا. إذا لم يتم تجديد التأجير ضمن هذه الفترة الزمنية، فإنه يؤدي إلى انتهاء صلاحية وملكية القسم سينتقل إلى مثيل آخر. الافتراضي هو 60000 (60 ثانية).
leaseRenewInterval LeaseRenewInterval (اختياري) عند تعيينها، تعرف، بالمللي ثانية، فترة التجديد لكافة عقود الإيجار للأقسام الموجودة حاليا بواسطة مثيل. الافتراضي هو 17000 (17 ثانية).
checkpointFrequency CheckpointFrequency (اختياري) عند تعيينها، تعرف، بالمللي ثانية، الفاصل الزمني بين نقاط التفتيش التأجير. الافتراضي هو دائما بعد كل استدعاء دالة.
maxItemsPerInvocation MaxItemsPerInvocation (اختياري) عند تعيينه، فإنه يخصص الحد الأقصى لمقدار العناصر التي يتم تلقيها لكل استدعاء دالة.
startFromBeginning StartFromBeginning (اختياري) عند التعيين، فإنه يخبر المشغل لبدء قراءة التغييرات من بداية محفوظات المجموعة بدلاً من الوقت الحالي. يعمل هذا فقط في المرة الأولى لقيام المشغل ببدء تشغيل، كما في عمليات التشغيل اللاحقة، نقاط التحقق المخزنة بالفعل. وتعيين هذا إلى true عندما يكون هناك عقود إيجار تم إنشاؤها بالفعل ليس له أي تأثير.

عندما تقوم بالتطوير محليًا، أضف إعدادات التطبيق في ملف local.settings.json في المجموعة Values.

المشغل - الاستخدام

يتطلب المشغل مجموعة ثانية يستخدمها لتخزين عقود الإيجار عبر الأقسام. يجب أن تكون المجموعة التي يتم مراقبتها والمجموعة التي تحتوي على عقود الإيجار متوفرة لتشغيل المشغل.

هام

إذا تم تكوين دوال متعددة لاستخدام مشغل Azure Cosmos DB لنفس المجموعة، يجب أن تستخدم كل دالة مجموعة تأجير مخصصة أو تحدد مختلفة LeaseCollectionPrefix لكل دالة. وإلا، سيتم تشغيل واحد فقط من الدالات. للحصول على معلومات حول البادئة، راجع قسم التكوين.

لا يشير المشغل إلى ما إذا كان قد تم تحديث مستند أو إدراجه، بل يوفر المستند نفسه فقط. إذا كنت بحاجة إلى معالجة التحديثات وإدراج بشكل مختلف، يمكنك القيام بذلك عن طريق تطبيق حقول الطابع الزمني للإدراج أو التحديث.

إدخال

يستخدم رابط إدخال Azure Cosmos DB واجهة برامج تطبيقات SQL لاسترداد مستند أو أكثر من مستندات Azure Cosmos DB ويمررها إلى معلمة الإدخال للدالة. يمكن تحديد معرّف المستند أو معلمات الاستعلام استنادًا إلى المشغل الذي يستدعي الوظيفة.

الإدخال - مثال

يحتوي هذا القسم على الأمثلة التالية:

تشير الأمثلة إلى نوع ToDoItem بسيط:

namespace CosmosDBSamplesV1
{
    public class ToDoItem
    {
        public string Id { get; set; }
        public string Description { get; set; }
    }
}

مشغِّل قائمة الانتظار، البحث عن معرّف من JSON

يظهر المثال التالي دالة C#‎ التي تسترد مستنداً واحداً. تُشغَّل الدالة بواسطة رسالة قائمة انتظار تحتوي على كائن JSON. يقوم مشغل قائمة الانتظار بتحليل JSON في كائن مسمى ToDoItemLookup، والذي يحتوي على معرف للبحث عنه. يُستخدم ذلك المعرّف لاسترداد ToDoItem مستند من قاعدة البيانات والمجموعة المحددة.

namespace CosmosDBSamplesV1
{
    public class ToDoItemLookup
    {
        public string ToDoItemId { get; set; }
    }
}
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;

namespace CosmosDBSamplesV1
{
    public static class DocByIdFromJSON
    {
        [FunctionName("DocByIdFromJSON")]
        public static void Run(
            [QueueTrigger("todoqueueforlookup")] ToDoItemLookup toDoItemLookup,
            [DocumentDB(
                databaseName: "ToDoItems",
                collectionName: "Items",
                ConnectionStringSetting = "CosmosDBConnection",
                Id = "{ToDoItemId}")]ToDoItem toDoItem,
            TraceWriter log)
        {
            log.Info($"C# Queue trigger function processed Id={toDoItemLookup?.ToDoItemId}");

            if (toDoItem == null)
            {
                log.Info($"ToDo item not found");
            }
            else
            {
                log.Info($"Found ToDo item, Description={toDoItem.Description}");
            }
        }
    }
}

مشغِّل HTTP، البحث عن معرّف من سلسلة الاستعلام

يظهر المثال التالي دالة C#‎ التي تسترد مستنداً واحداً. يتم تشغيل الوظيفة بواسطة طلب بروتوكول نص تشعبي يستخدم سلسلة استعلام لتحديد المعرّف للبحث عنه. يُستخدم ذلك المعرّف لاسترداد ToDoItem مستند من قاعدة البيانات والمجموعة المحددة.

using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Azure.WebJobs.Host;
using System.Net;
using System.Net.Http;

namespace CosmosDBSamplesV1
{
    public static class DocByIdFromQueryString
    {
        [FunctionName("DocByIdFromQueryString")]
        public static HttpResponseMessage Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]HttpRequestMessage req,
            [DocumentDB(
                databaseName: "ToDoItems",
                collectionName: "Items",
                ConnectionStringSetting = "CosmosDBConnection",
                Id = "{Query.id}")] ToDoItem toDoItem,
            TraceWriter log)
        {
            log.Info("C# HTTP trigger function processed a request.");
            if (toDoItem == null)
            {
                log.Info($"ToDo item not found");
            }
            else
            {
                log.Info($"Found ToDo item, Description={toDoItem.Description}");
            }
            return req.CreateResponse(HttpStatusCode.OK);
        }
    }
}

مشغِّل HTTP، البحث عن معرّف من بيانات المسار

يظهر المثال التالي دالة C#‎ التي تسترد مستنداً واحداً. تُشغَّل الدالة بواسطة طلب HTTP يستخدم بيانات المسار لتحديد المعرّف المطلوب البحث عنه. يُستخدم ذلك المعرّف لاسترداد ToDoItem مستند من قاعدة البيانات والمجموعة المحددة.

using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Azure.WebJobs.Host;
using System.Net;
using System.Net.Http;

namespace CosmosDBSamplesV1
{
    public static class DocByIdFromRouteData
    {
        [FunctionName("DocByIdFromRouteData")]
        public static HttpResponseMessage Run(
            [HttpTrigger(
                AuthorizationLevel.Anonymous, "get", "post",
                Route = "todoitems/{id}")]HttpRequestMessage req,
            [DocumentDB(
                databaseName: "ToDoItems",
                collectionName: "Items",
                ConnectionStringSetting = "CosmosDBConnection",
                Id = "{id}")] ToDoItem toDoItem,
            TraceWriter log)
        {
            log.Info("C# HTTP trigger function processed a request.");

            if (toDoItem == null)
            {
                log.Info($"ToDo item not found");
            }
            else
            {
                log.Info($"Found ToDo item, Description={toDoItem.Description}");
            }
            return req.CreateResponse(HttpStatusCode.OK);
        }
    }
}

تخطي أمثلة الإدخال

مشغِّل HTTP، البحث عن معرّف من بيانات المسار، باستخدام SqlQuery

يظهر المثال التالي دالة C#‎ التي تسترد مستنداً واحداً. تُشغَّل الدالة بواسطة طلب HTTP يستخدم بيانات المسار لتحديد المعرّف المطلوب البحث عنه. يُستخدم ذلك المعرّف لاسترداد ToDoItem مستند من قاعدة البيانات والمجموعة المحددة.

using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Azure.WebJobs.Host;
using System.Collections.Generic;
using System.Net;
using System.Net.Http;

namespace CosmosDBSamplesV1
{
    public static class DocByIdFromRouteDataUsingSqlQuery
    {
        [FunctionName("DocByIdFromRouteDataUsingSqlQuery")]
        public static HttpResponseMessage Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post",
                Route = "todoitems2/{id}")]HttpRequestMessage req,
            [DocumentDB(
                databaseName: "ToDoItems",
                collectionName: "Items",
                ConnectionStringSetting = "CosmosDBConnection",
                SqlQuery = "select * from ToDoItems r where r.id = {id}")] IEnumerable<ToDoItem> toDoItems,
            TraceWriter log)
        {
            log.Info("C# HTTP trigger function processed a request.");
            foreach (ToDoItem toDoItem in toDoItems)
            {
                log.Info(toDoItem.Description);
            }
            return req.CreateResponse(HttpStatusCode.OK);
        }
    }
}

تخطي أمثلة الإدخال

مشغِّل HTTP، الحصول على مستندات متعددة، وذلك باستخدام SqlQuery

يظهر المثال التالي دالة C#‎ التي تسترد قائمة مستندات. تُشغَّل الدالة بواسطة طلب HTTP. يُحدد الاستعلام في خاصية السمة SqlQuery.

using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Azure.WebJobs.Host;
using System.Collections.Generic;
using System.Net;
using System.Net.Http;

namespace CosmosDBSamplesV1
{
    public static class DocsBySqlQuery
    {
        [FunctionName("DocsBySqlQuery")]
        public static HttpResponseMessage Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]
                HttpRequestMessage req,
            [DocumentDB(
                databaseName: "ToDoItems",
                collectionName: "Items",
                ConnectionStringSetting = "CosmosDBConnection",
                SqlQuery = "SELECT top 2 * FROM c order by c._ts desc")]
                IEnumerable<ToDoItem> toDoItems,
            TraceWriter log)
        {
            log.Info("C# HTTP trigger function processed a request.");
            foreach (ToDoItem toDoItem in toDoItems)
            {
                log.Info(toDoItem.Description);
            }
            return req.CreateResponse(HttpStatusCode.OK);
        }
    }
}

تخطي أمثلة الإدخال

مشغل HTTP، الحصول على مستندات متعددة، وذلك باستخدام DocumentClient (C#)

يظهر المثال التالي دالة C#‎ التي تسترد قائمة مستندات. تُشغَّل الدالة بواسطة طلب HTTP. تستخدم التعليمة البرمجية مثيل DocumentClient وفره ربط Azure Cosmos DB لقراءة قائمة المستندات. يمكن أيضاً استخدام المثيل DocumentClient لعمليات الكتابة.

using Microsoft.Azure.Documents.Client;
using Microsoft.Azure.Documents.Linq;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Azure.WebJobs.Host;
using System;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;

namespace CosmosDBSamplesV1
{
    public static class DocsByUsingDocumentClient
    {
        [FunctionName("DocsByUsingDocumentClient")]
        public static async Task<HttpResponseMessage> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]HttpRequestMessage req,
            [DocumentDB(
                databaseName: "ToDoItems",
                collectionName: "Items",
                ConnectionStringSetting = "CosmosDBConnection")] DocumentClient client,
            TraceWriter log)
        {
            log.Info("C# HTTP trigger function processed a request.");

            Uri collectionUri = UriFactory.CreateDocumentCollectionUri("ToDoItems", "Items");
            string searchterm = req.GetQueryNameValuePairs()
                .FirstOrDefault(q => string.Compare(q.Key, "searchterm", true) == 0)
                .Value;

            if (searchterm == null)
            {
                return req.CreateResponse(HttpStatusCode.NotFound);
            }

            log.Info($"Searching for word: {searchterm} using Uri: {collectionUri.ToString()}");
            IDocumentQuery<ToDoItem> query = client.CreateDocumentQuery<ToDoItem>(collectionUri)
                .Where(p => p.Description.Contains(searchterm))
                .AsDocumentQuery();

            while (query.HasMoreResults)
            {
                foreach (ToDoItem result in await query.ExecuteNextAsync())
                {
                    log.Info(result.Description);
                }
            }
            return req.CreateResponse(HttpStatusCode.OK);
        }
    }
}

الإدخال - السمات

في مكتبات فئات C# قيد المعالجة، استخدم السمة DocumentDB.

الدالة الإنشائية للسمة تأخذ اسم قاعدة البيانات واسم المجموعة. للحصول على معلومات حول هذه الإعدادات والخصائص الأخرى التي يمكنك تكوينها، راجع قسم التكوين التالي.

الإدخال - التكوين

يشرح الجدول التالي خصائص تكوين الرابط التي قمت بتعيينها في الملف function.json و DocumentDB السمة.

خاصية function.json خاصية السمة ‏‏الوصف
النوع غير متوفر يجب تعيينه إلى documentdb.
الاتجاه غير متوفر يجب تعيينه إلى in.
الاسم غير متوفر اسم معلمة الربط التي تمثل المستند في الدالة.
databaseName DatabaseName قاعدة البيانات التي تحتوي على المستند.
collectionName CollectionName اسم المجموعة التي تحتوي على المستند.
معرف معرّف معرّف المستند المطلوب استرداده. تدعم هذه الخاصية تعبيرات الربط. لا تقم بتعيين كل من خصائص المعرف و sqlQuery. إذا لم تُعيِّن أياً منهما، تُسترد المجموعة بأكملها.
sqlQuery SqlQuery استعلام Azure Cosmos DB SQL المستخدم لاسترداد مستندات متعددة. تدعم الخاصية روابط وقت التشغيل، كما هو الحال في هذا المثال: SELECT * FROM c where c.departmentId = {departmentId}. لا تقم بتعيين كل من خصائص المعرف و sqlQuery. إذا لم تُعيِّن أياً منهما، تُسترد المجموعة بأكملها.
الاتصال ConnectionStringSetting اسم إعداد التطبيق الذي يحتوي على سلسلة اتصال Azure Cosmos DB.
partitionKey مفتاح القسم تحديد قيمة مفتاح القسم المطلوب للبحث. قد تتضمن معلمات الربط.

عندما تقوم بالتطوير محليًا، أضف إعدادات التطبيق في ملف local.settings.json في المجموعة Values.

الإدخال - الاستخدام

عند الخروج من الدالة بنجاح، تستمر أي تغييرات أُجريت على مستند الإدخال عبر معلمات الإدخال المسماة تلقائياً.

المخرجات

يتيح لك رابط إخراج Azure Cosmos DB كتابة مستند جديد في قاعدة بيانات Azure Cosmos DB باستخدام واجهة برمجة تطبيقات SQL.

مثال - الإخراج

يحتوي هذا القسم على الأمثلة التالية:

  • مشغل قائمة الانتظار، كتابة مستند واحد
  • مشغل قائمة الانتظار، كتابة مستندات باستخدام IAsyncCollector

تشير الأمثلة إلى نوع ToDoItem بسيط:

namespace CosmosDBSamplesV1
{
    public class ToDoItem
    {
        public string Id { get; set; }
        public string Description { get; set; }
    }
}

مشغل قائمة الانتظار، كتابة مستند واحد

يظهر المثال التالي دالة C#‎ التي تضيف مستندًا إلى قاعدة بيانات، باستخدام البيانات المتوفرة في رسالة من مخزن قائمة الانتظار.

using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using System;

namespace CosmosDBSamplesV1
{
    public static class WriteOneDoc
    {
        [FunctionName("WriteOneDoc")]
        public static void Run(
            [QueueTrigger("todoqueueforwrite")] string queueMessage,
            [DocumentDB(
                databaseName: "ToDoItems",
                collectionName: "Items",
                ConnectionStringSetting = "CosmosDBConnection")]out dynamic document,
            TraceWriter log)
        {
            document = new { Description = queueMessage, id = Guid.NewGuid() };

            log.Info($"C# Queue trigger function inserted one row");
            log.Info($"Description={queueMessage}");
        }
    }
}

مشغل قائمة الانتظار، كتابة مستندات باستخدام IAsyncCollector

يظهر المثال التالي دالة C#‎ التي تضيف مستندًا إلى قاعدة بيانات، باستخدام البيانات المتوفرة في JSON رسالة قائمة الانتظار.

using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using System.Threading.Tasks;

namespace CosmosDBSamplesV1
{
    public static class WriteDocsIAsyncCollector
    {
        [FunctionName("WriteDocsIAsyncCollector")]
        public static async Task Run(
            [QueueTrigger("todoqueueforwritemulti")] ToDoItem[] toDoItemsIn,
            [DocumentDB(
                databaseName: "ToDoItems",
                collectionName: "Items",
                ConnectionStringSetting = "CosmosDBConnection")]
                IAsyncCollector<ToDoItem> toDoItemsOut,
            TraceWriter log)
        {
            log.Info($"C# Queue trigger function processed {toDoItemsIn?.Length} items");

            foreach (ToDoItem toDoItem in toDoItemsIn)
            {
                log.Info($"Description={toDoItem.Description}");
                await toDoItemsOut.AddAsync(toDoItem);
            }
        }
    }
}

الإخراج - سمات

في مكتبات فئات C# قيد المعالجة، استخدم السمة DocumentDB.

الدالة الإنشائية للسمة تأخذ اسم قاعدة البيانات واسم المجموعة. للحصول على معلومات حول هذه الإعدادات والخصائص الأخرى التي يمكنك تكوينها، راجع الإخراج - التكوين. فيما يلي DocumentDB مثال سمة في توقيع أسلوب:

    [FunctionName("QueueToDocDB")]
    public static void Run(
        [QueueTrigger("myqueue-items", Connection = "AzureWebJobsStorage")] string myQueueItem,
        [DocumentDB("ToDoList", "Items", Id = "id", ConnectionStringSetting = "myCosmosDB")] out dynamic document)
    {
        ...
    }

للحصول على مثال كامل، راجع الإخراج.

الإخراج - التكوين

يشرح الجدول التالي خصائص تكوين الرابط التي قمت بتعيينها في الملف function.json و DocumentDB السمة.

خاصية function.json خاصية السمة ‏‏الوصف
النوع غير متوفر يجب تعيينه إلى documentdb.
الاتجاه غير متوفر يجب تعيينه إلى out.
الاسم غير متوفر اسم معلمة الربط التي تمثل المستند في الدالة.
databaseName DatabaseName قاعدة البيانات التي تحتوي على المجموعة حيث يتم إنشاء المستند.
collectionName CollectionName اسم المجموعة حيث تم إنشاء المستند.
createIfNotExists CreateIfNotExists قيمة منطقية للإشارة إلى ما إذا كانت المجموعة قد تم إنشاؤها عند عدم وجودها أم لا. القيمة الافتراضية هي false لأنه يتم إنشاء مجموعات جديدة باستخدام معدل النقل المحجوز، والذي له آثار تكلفة. لمزيد من المعلومات، راجع صفحة التسعير.
partitionKey مفتاح القسم عندما تكون CreateIfNotExists صحيحة، يحدد مسار مفتاح القسم للمجموعة التي تم إنشاؤها.
collectionThroughput CollectionThroughput عندما تكون CreateIfNotExists صحيحة، تحدد معدل نقل المجموعة التي تم إنشاؤها.
الاتصال ConnectionStringSetting اسم إعداد التطبيق الذي يحتوي على سلسلة اتصال Azure Cosmos DB.

عندما تقوم بالتطوير محليًا، أضف إعدادات التطبيق في ملف local.settings.json في المجموعة Values.

الإخراج - الاستخدام

بشكل افتراضي، عند الكتابة إلى معلمة الإخراج في الدالة الخاصة بك، يتم إنشاء مستند في قاعدة البيانات الخاصة بك. يحتوي هذا المستند على GUID تم إنشاؤه تلقائيًا كمعرف للمستند. يمكنك تحديد معرف المستند لمستند الإخراج عن طريق تحديد الخاصية id في كائن JSON الذي تم تمريره إلى معلمة الإخراج.

إشعار

عند تحديد معرف مستند موجود، فإنه يُحذف بواسطة مستند الإخراج الجديد.

الاستثناءات والتعليمات البرمجية للإرجاع

Binding المرجع
Azure Cosmos DB رموز حالة HTTP لـ Azure Cosmos DB

الخطوات التالية