تغيير التدفقات في واجهة برمجة تطبيقات Azure Cosmos DB لـ MongoDB

ينطبق على: MongoDB

يتوفر دعم تغيير الخلاصة في واجهة برمجة تطبيقات Azure Cosmos DB لـ MongoDB باستخدام واجهة برمجة تطبيقات دفق التغيير. باستخدام واجهة برمجة تطبيقات تدفقات التغيير، يمكن لتطبيقاتك إجراء التغييرات على المجموعة أو العناصر الموجودة في جزء واحد. يمكنك لاحقًا اتخاذ مزيد من الإجراءات بناءً على النتائج. يتم تسجيل التغييرات التي تم إجراؤها على العناصر في المجموعة بترتيب وقت تعديلها ويتم ضمان ترتيب الفرز لكل مفتاح جزء.

إشعار

لاستخدام تدفقات التغيير، أنشئ واجهة برمجة تطبيقات Azure Cosmos DB لحساب MongoDB مع إصدار الخادم 3.6 أو أعلى. إذا قمت بتشغيل أمثلة تدفق التغيير على إصدار سابق، فقد ترى خطأ اسم مرحلة المسار غير المعروف: $ changeStream .

الأمثلة

يوضح المثال التالي كيفية الحصول على تدفقات التغيير على جميع العناصر في المجموعة. ينشئ هذا المثال مؤشرًا لمشاهدة العناصر عند إدراجها أو تحديثها أو استبدالها. مطلوب خيار $match المرحلة، $project والمرحلة fullDocument للحصول على دفقات التغيير. مراقبة عمليات الحذف باستخدام تدفقات التغيير غير مدعوم حاليًا. كحل بديل، يمكنك إضافة علامة ناعمة على العناصر التي يتم حذفها. على سبيل المثال، يمكنك إضافة سمة في العنصر المُسمى "deleted." عندما تريد حذف العنصر، ويمكنك تعيين "deleted" على true وتعيين TTL على العنصر. نظرًا إلى أن تحديث "المحذوفة" إلى true يعد تحديثًا، سيكون هذا التغيير مرئيًا في تدفق التغيير.

var cursor = db.coll.watch(
    [
        { $match: { "operationType": { $in: ["insert", "update", "replace"] } } },
        { $project: { "_id": 1, "fullDocument": 1, "ns": 1, "documentKey": 1 } }
    ],
    { fullDocument: "updateLookup" });

while (!cursor.isExhausted()) {
    if (cursor.hasNext()) {
        printjson(cursor.next());
    }
}

التغييرات داخل جزء واحد

يوضح المثال التالي كيفية إجراء تغييرات على العناصر داخل جزء واحد. يحصل هذا المثال على تغييرات العناصر التي تحتوي على مفتاح جزء مساوٍ لـ "a" وقيمة مفتاح جزء تساوي "1". من الممكن أن يكون لديك عملاء مختلفون يقرؤون التغييرات من أجزاء مختلفة بالتوازي.

var cursor = db.coll.watch(
    [
        { 
            $match: { 
                $and: [
                    { "fullDocument.a": 1 }, 
                    { "operationType": { $in: ["insert", "update", "replace"] } }
                ]
            }
        },
        { $project: { "_id": 1, "fullDocument": 1, "ns": 1, "documentKey": 1} }
    ],
    { fullDocument: "updateLookup" });

تحجيم تيارات التغيير

عند استخدام تدفقات التغيير على نطاق واسع، من الأفضل توزيع الحمل بالتساوي. استخدم الأمر المخصص GetChangeStreamTokens لتوزيع الحمل عبر الأجزاء / الأقسام المادية.

القيود الحالية

القيود التالية قابلة للتطبيق عند استخدام تدفقات التغيير:

  • الخصائص operationType وupdateDescription غير مدعومة بعد في المستند الناتج.
  • يتم دعم أنواع العمليات insert وupdate وreplace حاليًا. ومع ذلك، لا يتم دعم عملية الحذف أو الأحداث الأخرى حتى الآن.

نظرًا إلى هذه القيود، يلزم وجود خيارات $ match و$ project stage وfullDocument كما هو موضح في الأمثلة السابقة.

على عكس موجز التغيير في واجهة برمجة تطبيقات Azure Cosmos DB ل NoSQL، لا توجد مكتبة معالج موجز تغيير منفصلة لاستهلاك تدفقات التغيير أو الحاجة إلى حاوية عقود الإيجار. لا يوجد دعم حاليًا لمشغلات وظائف Azure لمعالجة تدفقات التغيير.

معالجة الخطأ

يتم دعم رموز الخطأ والرسائل التالية عند استخدام تدفقات التغيير:

  • رمز خطأ HTTP 16500 - عندما يتم تقييد تدفق التغيير، يتم إرجاع صفحة فارغة.

  • NamespaceNotFound (OperationType Invalidate) - إذا قمت بتشغيل دفق التغيير على مجموعة غير موجودة أو إذا تم إسقاط المجموعة، فسيتم إرجاع الخطأ NamespaceNotFound. نظرًا إلى أنه لا يمكن إرجاع الخاصية operationType في مستند الإخراج، بدلاً من الخطأ operationType Invalidate، يتم إرجاع الخطأ NamespaceNotFound.

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