التشغيل السريع: Azure Cosmos DB لبرنامج تشغيل MongoDB Node.js
ينطبق على: MongoDB
ابدأ باستخدام حزمة MongoDB npm لإنشاء قواعد البيانات والمجموعات والمستندات داخل مورد Azure Cosmos DB. يُرجى اتباع هذه الخطوات لتثبيت الحزمة وتجربة التعليمات البرمجية للمهام الأساسية.
API للوثائق | المرجعية MongoDB حزم حزمة MongoDB (NuGet) / Microsoft.Azure.Cosmos) | Azure Developer CLI
المتطلبات الأساسية
- حساب Azure مع اشتراك نشط. أنشئ حساباً مجاناً.
- حساب GitHub
- حساب Azure مع اشتراك نشط. أنشئ حساباً مجاناً.
- Azure Developer CLI
- Docker Desktop
الإعداد
نشر حاوية تطوير هذا المشروع إلى البيئة الخاصة بك. ثم استخدم Azure Developer CLI (azd
) لإنشاء Azure Cosmos DB لحساب MongoDB ونشر نموذج تطبيق حاوية. يستخدم نموذج التطبيق مكتبة العميل لإدارة البيانات النموذجية وإنشاءها وقراءتها والاستعلام عن البيانات.
هام
تتضمن حسابات GitHub استحقاق التخزين والساعات الأساسية دون أي تكلفة. لمزيد من المعلومات، راجع التخزين المضمن والساعات الأساسية لحسابات GitHub.
افتح محطة طرفية في الدليل الجذر للمشروع.
المصادقة على Azure Developer CLI باستخدام
azd auth login
. اتبع الخطوات المحددة بواسطة الأداة للمصادقة على CLI باستخدام بيانات اعتماد Azure المفضلة لديك.azd auth login
استخدم
azd init
لتهيئة المشروع.azd init --template cosmos-db-mongodb-nodejs-quickstart
إشعار
يستخدم هذا التشغيل السريع مستودع GitHub لقالب azure-samples/cosmos-db-mongodb-nodejs-quickstart . سيقوم Azure Developer CLI تلقائيا باستنساخ هذا المشروع إلى جهازك إذا لم يكن موجودا بالفعل.
أثناء التهيئة، قم بتكوين اسم بيئة فريد.
تلميح
سيتم أيضا استخدام اسم البيئة كاسم مجموعة الموارد الهدف. لهذا التشغيل السريع، ضع في اعتبارك استخدام
msdocs-cosmos-db
.انشر حساب Azure Cosmos DB باستخدام
azd up
. تنشر قوالب Bicep أيضا نموذج تطبيق ويب.azd up
أثناء عملية التوفير، حدد اشتراكك والموقع المطلوب. انتظر حتى اكتمال عملية التوفير. قد تستغرق العملية حوالي خمس دقائق.
بمجرد توفير موارد Azure الخاصة بك، يتم تضمين عنوان URL لتطبيق الويب قيد التشغيل في الإخراج.
Deploying services (azd deploy) (✓) Done: Deploying service web - Endpoint: <https://[container-app-sub-domain].azurecontainerapps.io> SUCCESS: Your application was provisioned and deployed to Azure in 5 minutes 0 seconds.
استخدم عنوان URL في وحدة التحكم للانتقال إلى تطبيق الويب الخاص بك في المستعرض. لاحظ إخراج التطبيق قيد التشغيل.
تثبيت الحزمة
أضف حزمة MongoDB npm إلى مشروع JavaScript. استخدم الأمر npm install package
الذي يحدد اسم حزمة npm. يتم استخدام الحزمة dotenv
لقراءة متغيرات البيئة من ملف .env
أثناء التطوير المحلي.
npm install mongodb dotenv
نموذج الكائن
قبل البدء في إنشاء التطبيق، لنلقِ نظرة على التدرج الهرمي للموارد في قاعدة بيانات Azure Cosmos DB. تحتوي قاعدة بيانات Azure Cosmos DB على نموذج كائن محدد يُستخدم لإنشاء الموارد والوصول إليها. تنشئ قاعدة بيانات Azure Cosmos DB موارد في تدرج هرمي يتكون من الحسابات وقواعد البيانات والحاويات والمستندات.
رسم تخطيطي هرمي يظهر حساب قاعدة بيانات Azure Cosmos في الأعلى. يحتوي الحساب على جزأين تابعين لقاعدة البيانات. يتضمن أحد أجزاء قاعدة البيانات جزأين تابعين للمجموعة. يتضمن جزء قاعدة البيانات الآخر عقدة مجموعة تابعة واحدة. يحتوي جزء المجموعة المفرد هذا على ثلاثة أجزاء من المستند التابع.
يمكنك استخدام فئات MongoDB التالية للتفاعل مع هذه الموارد:
MongoClient
- توفر هذه الفئة تمثيلا منطقيا من جانب العميل لواجهة برمجة التطبيقات لطبقة MongoDB على Azure Cosmos DB. يتم استخدام كائن العميل لتكوين الطلبات وتنفيذها على الخدمة.Db
- هذه الفئة هي مرجع إلى قاعدة بيانات قد تكون موجودة في الخدمة أو قد لا تكون موجودة بعد. يتم التحقق من صحة قاعدة البيانات من جانب الخادم عند محاولة الوصول إليها أو إجراء عملية ضدها.Collection
- هذه الفئة هي مرجع إلى مجموعة قد لا تكون موجودة أيضا في الخدمة حتى الآن. يتم التحقق من صحة المجموعة من جانب الخادم عندما تحاول استخدامها.
أمثلة على التعليمات البرمجية
- مصادقة العميل
- الحصول على مثيل قاعدة البيانات
- الحصول على مثيل المجموعة
- استخدام أساليب متسلسل
- إنشاء فهرس
- إنشاء مستند
- الحصول على مستند
- تشغيل الاستعلامات
ينشئ نموذج التعليمات البرمجية الموضح في هذه المقالة قاعدة بيانات مسماة adventureworks
بحاوية مُسماة products
. تم تصميم المجموعة products
لتحتوي على تفاصيل المنتج مثل الاسم والفئة والكمية ومؤشر البيع. يحتوي كل منتج أيضًا على معرّف فريد.
بالنسبة لهذا الإجراء، لا تستخدم قاعدة البيانات التقسيم.
مصادقة العميل
من دليل المشروع، قم بإنشاء ملف index.js. في المحرر الخاص بك، أضف يتطلب عبارات للإشارة إلى حزم MongoDB وDotEnv npm.
// Read .env file and set environment variables require('dotenv').config(); const random = Math.floor(Math.random() * 100); // Use official mongodb driver to connect to the server const { MongoClient, ObjectId } = require('mongodb');
حدد مثيلاً جديدًا للفئة
MongoClient,
باستخدام الدالة الإنشائية، وprocess.env.
لقراءة متغير البيئة الذي أنشأته سابقًا.// New instance of MongoClient with connection string // for Cosmos DB const url = process.env.COSMOS_CONNECTION_STRING; const client = new MongoClient(url);
لمزيد من المعلومات حول الطرق المختلفة لإنشاء مثيل MongoClient
، راجع التشغيل السريع لبرنامج تشغيل MongoDB NodeJS.
إعداد العمليات غير المتزامنة
في الملف index.js
، أضف التعليمات البرمجية التالية لدعم العمليات غير المتزامنة:
async function main(){
// The remaining operations are added here
// in the main function
}
main()
.then(console.log)
.catch(console.error)
.finally(() => client.close());
يجب إضافة القصاصات البرمجية التالية إلى الدالة الرئيسية من أجل التعامل مع بناء الجملة غير المتزامن/الانتظار.
الاتصال بقاعدة البيانات
MongoClient.connect
استخدم الأسلوب للاتصال ب Azure Cosmos DB لمورد MongoDB. يقوم أسلوب الاتصال بإرجاع مرجع إلى قاعدة البيانات.
// Use connect method to connect to the server
await client.connect();
الحصول على مثيل قاعدة البيانات
استخدم MongoClient.db
الحصول على مرجع إلى قاعدة بيانات.
// Database reference with creation if it does not already exist
const db = client.db(`adventureworks`);
console.log(`New database:\t${db.databaseName}\n`);
الحصول على مثيل المجموعة
يحصل MongoClient.Db.collection
على مرجع إلى مجموعة.
// Collection reference with creation if it does not already exist
const collection = db.collection('products');
console.log(`New collection:\t${collection.collectionName}\n`);
المثيلات المتسلسلة
يمكنك ربط العميل وقاعدة البيانات والمجموعة معًا. هذا التسلسل أكثر ملاءمة إذا كنت بحاجة إلى الوصول إلى قواعد بيانات أو مجموعات متعددة.
const db = await client.db(`adventureworks`).collection('products').updateOne(query, update, options)
إنشاء فهرس
استخدم Collection.createIndex
لإنشاء فهرس على خصائص المستند التي تنوي استخدامها للفرز باستخدام أسلوب MongoDBFindCursor.sort
.
// create index to sort by name
const indexResult = await collection.createIndex({ name: 1 });
console.log(`indexResult: ${JSON.stringify(indexResult)}\n`);
إنشاء مستند
أنشئ مستندًا بخصائص المنتجadventureworks
لقاعدة البيانات:
- خاصية _id للمعرف الفريد للمنتج.
- * خاصية الفئة. يمكن استخدام هذه الخاصية كمفتاح القسم المنطقي.
- * خاصية الاسم.
- * خاصية كمية المخزون.
- * خاصية البيع، مما يشير إلى ما إذا كان المنتج قيد البيع.
// Create new doc and upsert (create or replace) to collection
const product = {
category: "gear-surf-surfboards",
name: `Yamba Surfboard-${random}`,
quantity: 12,
sale: false
};
const query = { name: product.name};
const update = { $set: product };
const options = {upsert: true, new: true};
// Insert via upsert (create or replace) doc to collection directly
const upsertResult1 = await collection.updateOne(query, update, options);
console.log(`upsertResult1: ${JSON.stringify(upsertResult1)}\n`);
// Update via upsert on chained instance
const query2 = { _id: ObjectId(upsertResult1.upsertedId) };
const update2 = { $set: { quantity: 20 } };
const upsertResult2 = await client.db(`adventureworks`).collection('products').updateOne(query2, update2, options);
console.log(`upsertResult2: ${JSON.stringify(upsertResult2)}\n`);
إنشاء مستند في المجموعة عن طريق استدعاء Collection.UpdateOne
. في هذا المثال، اخترنا upsert بدلاً من إنشاء مستند جديد في حالة تشغيل نموذج التعليمات البرمجية هذا أكثر من مرة.
الحصول على مستند
في قاعدة بيانات Azure Cosmos DB، يمكنك إجراء عملية قراءة نقطة أقل تكلفة باستخدام كل من المعرّف الفريد (_id
) ومفتاح القسم (category
).
// Point read doc from collection:
// - without sharding, should use {_id}
// - with sharding, should use {_id, partitionKey }, ex: {_id, category}
const foundProduct = await collection.findOne({
_id: ObjectId(upsertResult1.upsertedId),
category: "gear-surf-surfboards"
});
console.log(`foundProduct: ${JSON.stringify(foundProduct)}\n`);
مستندات الاستعلام
بعد إدراج مستند، يمكنك تشغيل استعلام للحصول على كافة المستندات التي تطابق عامل تصفية معينًا. يبحث هذا المثال عن كافة المستندات التي تطابق فئة محددة: gear-surf-surfboards
. بمجرد تحديد الاستعلام، يمكنك Collection.find
استدعاء FindCursor
للحصول على نتيجة. قم بتحويل المؤشر إلى صفيف لاستخدام أساليب صفيف JavaScript.
// select all from product category
const allProductsQuery = {
category: "gear-surf-surfboards"
};
// get all documents, sorted by name, convert cursor into array
const products = await collection.find(allProductsQuery).sort({name:1}).toArray();
products.map((product, i ) => console.log(`${++i} ${JSON.stringify(product)}`));
استكشاف الأخطاء وإصلاحها:
- إذا تلقيت خطأ مثل
The index path corresponding to the specified order-by item is excluded.
، فتأكد من إنشاء الفهرس.
تشغيل التعليمات البرمجية
ينشئ هذا التطبيق واجهة برمجة تطبيقات لقاعدة بيانات MongoDB ومجموعة وينشئ مستندا ثم يقرأ نفس المستند بالضبط مرة أخرى. وأخيرا، يصدر المثال استعلاما يجب أن يرجع هذا المستند الفردي فقط. مع كل خطوة، يقوم المثال بإخراج معلومات إلى وحدة التحكم حول الخطوات التي تم تنفيذها.
لتشغيل التطبيق، استخدم terminal للانتقال إلى دليل التطبيق وتشغيل التطبيق.
node index.js
يجب أن يكون إخراج التطبيق مشابهًا لهذا المثال:
New database: adventureworks
New collection: products
upsertResult1: {"acknowledged":true,"modifiedCount":0,"upsertedId":"62b1f492ff69395b30a03169","upsertedCount":1,"matchedCount":0}
upsertResult2: {"acknowledged":true,"modifiedCount":1,"upsertedId":null,"upsertedCount":0,"matchedCount":1}
foundProduct: {"_id":"62b1f492ff69395b30a03169","name":"Yamba Surfboard-93","category":"gear-surf-surfboards","quantity":20,"sale":false}
indexResult: "name_1"
1 {"_id":"62b1f47dacbf04e86c8abf25","name":"Yamba Surfboard-11","category":"gear-surf-surfboards","quantity":20,"sale":false}
done
تنظيف الموارد
عندما لم تعد بحاجة إلى Azure Cosmos DB لحساب MongoDB، يمكنك حذف مجموعة الموارد المقابلة.
استخدم الأمر az group delete
لحذف مجموعة الموارد.
az group delete --name $resourceGroupName
الخطوات التالية
في هذا التشغيل السريع، تعلمت كيفية إنشاء حساب Azure Cosmos DB لحساب MongoDB، وإنشاء قاعدة بيانات، وإنشاء مجموعة باستخدام برنامج تشغيل MongoDB. يمكنك الآن التعمق أكثر في Azure Cosmos DB ل MongoDB لاستيراد المزيد من البيانات وإجراء استعلامات معقدة وإدارة موارد Azure Cosmos DB MongoDB.