استكشاف المشكلات الشائعة وإصلاحها في واجهة برمجة تطبيقات Azure Cosmos DB لـ MongoDB

ينطبق على: MongoDB

توضح المقالة التالية الأخطاء الشائعة والحلول الخاصة بالنشر باستخدام Azure Cosmos DB ل MongoDB.

إشعار

لا يستضيف Azure Cosmos DB محرك MongoDB. يوفر تنفيذ الإصدار 4.0 و3.6 من البروتوكول السلكي لـ MongoDB ودعم الإصدار القديم للبروتوكول السلكي 3.2. لذلك، قد نواجه بعض هذه الأخطاء في API Azure Cosmos DB لـ MongoDB فقط.

الأخطاء الشائعة والحلول

رمز خطأ ‏‏الوصف حل
2 BadValue أحد الأسباب الشائعة هو استبعاد مسار الفهرس المقابل للعنصر المحدد ترتيبا تلو الآخر أو أن الترتيب حسب الاستعلام لا يحتوي على فهرس مركب مطابق يمكن تقديمه منه. يطلب الاستعلام فرزا على حقل غير مفهرس. أنشئ فهرساً مطابقاً (أو فهرساً مركباً) لاستعلام الفرز الذي تتم محاولة استخدامه.
2 المعاملة غير نشطة تجاوزت المعاملة متعددة المستندات الحد الزمني الثابت البالغ 5 ثوان. أعد محاولة المعاملة متعددة المستندات أو حدد نطاق العمليات داخل المعاملة متعددة المستندات لإكمالها خلال الحد الزمني البالغ 5 ثوان.
9 FailedToParse يشير إلى أن خادم Cosmos DB لم يتمكن من تفسير معلمة أو معالجتها لأن الإدخال المقدم لم يتوافق مع التنسيق المتوقع أو المدعوم. تأكد من تضمين المعلمات الصالحة والمدعمة فقط في استعلاماتك.
13 غير مصرح به لا يحتوي الطلب على أذونات لإكماله. تأكد من استخدام المفاتيح الصحيحة.
26 NamespaceNotFound لا يمكن العثور على قاعدة البيانات أو المجموعة المشار إليها في الاستعلام. تأكد من تطابق اسم قاعدة البيانات/المجموعة تماماً مع الاسم في الاستعلام.
50 ExceededTimeLimit تجاوز الطلب مهلة التنفيذ المقدرة بنحو 60 ثانية. يمكن أن يحدث هذه الخطأ بسبب عدة أسباب. أحد الأسباب هو عندما لا تكون سعة وحدات الطلب المخصصة حاليا كافية لإكمال الطلب. يمكن حل هذا الخطأ عن طريق زيادة وحدات الطلب في هذه المجموعة أو قاعدة البيانات. في حالات أخرى، يمكن حل هذا الخطأ عن طريق تقسيم طلب كبير إلى طلبات أصغر. قد تؤدي إعادة محاولة عملية الكتابة التي حدثت بها هذا الخطأ إلى تكرار الكتابة.

إذا كنت تحاول حذف كميات كبيرة من البيانات دون التأثير على وحدات الطلب:
- فكِّر في استخدام TTL (حسب الطابع الزمني): انتهاء صلاحية البيانات مع واجهة برمجة تطبيقات API Azure Cosmos DB لـ MongoDB
-- استخدم حجم المؤشر/الدفعة لتنفيذ الحذف. يمكنك جلب مستند واحد في كل مرة وحذفه من خلال تكرار حلقي. سيساعدك هذا في حذف البيانات ببطء دون التأثير في تطبيق الإنتاج.
61 ShardKeyNotFound لم يحتوي المستند في طلبك على مفتاح جزء المجموعة (مفتاح قسم Azure Cosmos DB). تأكد من استخدام مفتاح مقسم للمجموعة في الطلب.
66 ImmutableField يحاول الطلب تغيير حقل غير قابل للتغيير حقول "_id" غير قابلة للتغيير. تأكد من أن طلبك لا يحاول تحديث هذا الحقل أو حقل مفتاح القطع.
67 CannotCreateIndex لا يمكن إكمال طلب إنشاء فهرس. يمكن إنشاء ما يصل إلى 500 فهرس حقل فردي في حاوية. يمكن تضمين ما يصل إلى ثمانية حقول في فهرس مركب (الفهارس المركبة مدعومة في الإصدار 3.6+).
112 WriteConflict فشلت العملية متعددة المستندات بسبب حدوث تعارض في عملية متعددة المستندات أعد محاولة العملية متعددة المستندات إلى أن تكتمل.
115 CommandNotSupported الطلب الذي تمت محاولة القيام به غير مدعوم. يجب توفير تفاصيل أخرى في الخطأ. إذا كانت هذه الوظيفة مهمة بالنسبة إلى عمليات النشر الخاصة بك، فبادر بإنشاء تذكرة دعم في مدخل Microsoft Azure، وسيعود فريق Azure Cosmos DB إليك.
11000 DuplicateKey المفتاح المقسم (مفتاح قسم Azure Cosmos DB) للمستند الذي أدخلته موجود بالفعل في المجموعة أو تم انتهاك قيد حقل الفهرس الفريد. استخدم الدالة update() لتحديث مستند موجود. إذا تم انتهاك قيد حقل الفهرس الفريد، فقم بإدراج المستند أو تحديثه بقيمة حقل غير موجودة في الجزء/القسم حتى الآن. هناك خيار آخر وهو استخدام حقل يحتوي على مجموعة من حقول المعرف ومفتاح القطع.
16500 TooManyRequests العدد الإجمالي لوحدات الطلب المستهلكة أكثر من معدل وحدة الطلب المخصص للمجموعة وتم تقييده. يُرجى مراعاة حجم معدل النقل المعين في حاوية أو مجموعة حاويات من مدخل Azure أو يمكنك إعادة محاولة العملية. في حالة تمكين SSR (إعادة المحاولة من جانب الخادم)، يعيد Azure Cosmos DB محاولة الطلبات التي تفشل بسبب هذا الخطأ تلقائياً.
16501 ExceededMemoryLimit كخدمة متعددة المستأجرين، تجاوزت العملية تخصيص ذاكرة العميل. ينطبق هذا فقط على Azure Cosmos DB للإصدار 3.2 من MongoDB. قلِّل نطاق العملية من خلال معايير الاستعلام أكثر تقييداً أو اتصل بالدعم من مدخل Azure. مثال: db.getCollection('users').aggregate([{$match: {name: "Andy"}}, {$sort: {age: -1}}]))
40324 اسم مرحلة مسار غير معروف. لم يتم التعرف على اسم المرحلة في طلب مسار التجميع. تأكد من أن جميع أسماء مسار التجميع صالحة في طلبك.
- مشكلات الإصدارات السلكية لـ MongoDB الإصدارات القديمة من برامج تشغيل MongoDB غير قادرة على الكشف عن اسم حساب Azure Cosmos DB في سلسلة الاتصال. أدرج appName=@accountName@ في نهاية سلسلة الاتصال، حيث يكون accountName اسم حساب Azure Cosmos DB.
- مشكلات شبكة اتصال العميل MongoDB (على سبيل المثال استثناءات مأخذ التوصيل أو endOfStream) فشل طلب الشبكة. غالباً ما يحدث هذا بسبب اتصال TCP غير النشط الذي يحاول عميل MongoDB استخدامه. غالبا ما تستخدم برامج تشغيل MongoDB تجمع الاتصال، مما يؤدي إلى حدوث اتصال عشوائي محدد من التجمع المستخدم للطلب. عادة ما تنتهي مهلة الاتصالات غير النشطة على نهاية Azure Cosmos DB بعد أربع دقائق. يمكنك إمّا إعادة محاولة إجراء هذه الطلبات الفاشلة في التعليمات البرمجية لتطبيقك، وإمّا تغيير إعدادات (برنامج التشغيل) عميل MongoDB لإنهاء اتصالات TCP غير النشطة قبل ظهور نافذة انتهاء المهلة المقدرة بأربع دقائق، وإمّا تكوين إعدادات نظام التشغيل keepalive للحفاظ على اتصالات TCP في حالة نشطة.

لتجنب رسائل الاتصال، قد تحتاج إلى تغيير سلسلة الاتصال لتعيين maxConnectionIdleTime على فترة من دقيقة إلى دقيقتين.
- برنامج تشغيل Mongo: تكوين maxIdleTimeMS=120000
- Node.JS: تكوين socketTimeoutMS=120000, autoReconnect = صحيح، keepAlive = صحيح، keepAliveInitialDelay = 3 دقائق
- Mongo Shell لا يعمل في مدخل Azure عندما يحاول المستخدم فتح Mongo shell، لا يحدث شيء وتبقى علامة التبويب فارغة. افحص جدار الحماية. جدار الحماية غير مدعوم مع Mongo shell في مدخل Microsoft Azure.
- تثبيت Mongo shell على الكمبيوتر المحلي ضمن قواعد جدار الحماية
- استخدام إصدار قديم من Mongo shell
- تعذّر الاتصال بسلسلة الاتصال تم تغيير سلسلة الاتصال عند الترقية من 3.2 -> 3.6 عند استخدام واجهة برمجة تطبيقات Azure Cosmos DB لحسابات MongoDB، يحتوي الإصدار 3.6 من الحسابات على نقطة النهاية بالتنسيق *.mongo.cosmos.azure.com بينما يحتوي الإصدار 3.2 من الحسابات على نقطة النهاية بالتنسيق *.documents.azure.com.

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

  • تعرف على كيفية استخدام Studio 3T مع واجهة برمجة تطبيقات Azure Cosmos DB لـ MongoDB.
  • تعرف على كيفية استخدام Robo 3Tمع واجهة برمجة تطبيقات قاعدة بيانات Azure Cosmos لـ MongoDB.
  • استكشف نماذج MongoDB باستخدام واجهة برمجة تطبيقات Azure Cosmos DB لـ MongoDB.