MongoDB: إعداد البيئة وبرنامج Mongosh
آخر تحديث: 2026-08-26
يُعد «mongosh» عميل سطر الأوامر الرسمي لـ MongoDB — وهو الأداة الأكثر مباشرة للتفاعل مع MongoDB.
صُمم هذا الدليل التعليمي للمطورين الذين ليس لديهم خبرة سابقة، ويغطي كل شيء بدءًا من التثبيت المحلي وصولاً إلى الاتصال بـ Atlas، ومن الأوامر الأساسية لـ mongosh وصولاً إلى أول اختبار ping تقوم به.
1. ما ستتعلمه
- تثبيت إصدار MongoDB Community Edition على أنظمة التشغيل Windows أو macOS أو Linux
- نشر حاوية MongoDB بسرعة باستخدام Docker
- إنشاء مجموعة سحابية مجانية على MongoDB Atlas
- الاستخدامات الأساسية لعميل سطر الأوامر Mongosh
- تكوين المكون الإضافي لـ MongoDB في VSCode
- أول اختبار لاتصال قاعدة البيانات (
db.runCommand({ ping: 1 })) - حل المشكلات الشائعة المتعلقة بالتثبيت
2. قصة حقيقية لمهندس متكامل
(1) المشكلة: إعداد بيئة MongoDB من الصفر على جهاز كمبيوتر جديد
حصل بوب للتو على جهاز MacBook Pro M3 جديد، ويريد إعداد بيئة تطوير MongoDB على جهازه الجديد تمامًا:
"أريد ربط كود Node.js الخاص بي بقاعدة بيانات MongoDB وتشغيل أول عملية CRUD في غضون 30 دقيقة. لكنني كنت أستخدم نظام Windows، والآن انتقلت إلى جهاز Mac يعمل بمعالج ARM مزود بشريحة M3 — ولم تنجح أي من الدروس التعليمية التي عثرت عليها."
لقد جرب ثلاث طرق، لكنها باءت جميعها بالفشل:
| الحل | المشكلة |
|---|---|
| ❌ brew install mongodb | لا توجد صيغة رسمية لـ homebrew/core في بنية M3 ARM |
| ❌ تنزيل ملف التثبيت .dmg | رسالة: "يتعذر فتح الملف لأنه لا يمكن التحقق من هوية المطور" |
| ❌ من صفحة تنزيل MongoDB | لم يتم العثور على إصدار macOS ARM |
(2) حل باستخدام MongoDB و Docker
استخدم Docker لتجاوز جميع مشكلات التجميع المحلية.
# 1. Installation Docker Desktop for Mac (Apple Silicon)
# Download from https://www.docker.com/products/docker-desktop/
# 2. Pull MongoDB image
docker pull mongo:7.0
# 3. Start MongoDB Container(Port Forwarding + Data Volume)
docker run -d \
--name mongodb-dev \
-p 27017:27017 \
-v ~/mongodb-data:/data/db \
mongo:7.0
# 4. Use mongosh to connect
mongosh "mongodb://localhost:27017/admin"
# 5. Test Connection
db.runCommand({ ping: 1 })
# { ok: 1 }
(3) الإيرادات
| البعد | التثبيت الأصلي | التثبيت عبر Docker |
|---|---|---|
| متوافق مع جميع الأنظمة | ❌ يختلف حسب النظام | ✅ يُبنى مرة واحدة، ويُشغَّل في أي مكان |
| تعايش إصدارات متعددة | ❌ صعب | ✅ تشغيل حاويات متعددة |
| إلغاء التثبيت الكامل | ❌ إعدادات متبقية | ✅ مجرد حذف الحاوية |
| إجماع الفريق | ⚠️ يعتمد على إصدار نظام التشغيل | ✅ إصدار الصورة ثابت |
| وقت التشغيل | 1–3 دقائق | 5–10 ثوانٍ |
3. مقارنة بين طرق التركيب
نظرة عامة على المفهوم: يوفر MongoDB أربع طرق للتثبيت — حاويات Docker، وخدمة Atlas السحابية، والتثبيت الأصلي (brew/apt/msi)، ومديرات الحزم. تعتمد الطريقة التي تختارها على حالة الاستخدام الخاصة بك: يُوصى باستخدام Docker لبيئات التطوير (متوافقة مع مختلف الأنظمة الأساسية، ومعزولة، وسريعة)؛ ويُوصى باستخدام Atlas للتعاون بين أعضاء الفريق (لا تتطلب صيانة، ونشر عالمي)؛ ويُوصى بالتثبيت الأصلي لبيئات الإنتاج (أفضل أداء).
كيفية العمل: تعمل حاويات Docker على عزل عملية MongoDB باستخدام مساحات الأسماء في نظام Linux، ويتم حفظ البيانات على الجهاز المضيف عبر تثبيت وحدة التخزين. تقوم خدمة Atlas السحابية بنشر مجموعات النسخ المتماثلة تلقائيًا على AWS وAzure وGCP، مما يوفر النسخ الاحتياطية والمراقبة التلقائية. أما التثبيت الأصلي فيقوم بتشغيل عملية mongod مباشرةً، مما يوفر أداءً مثاليًّا ولكنه يتطلب إدارة يدوية.
graph TB
A[MongoDB Installation Methods] --> B[Native Installation<br/>brew/apt/dmg/exe]
A --> C[Docker Container<br/>Recommended for Rapid Development]
A --> D[Atlas Cloud Services<br/>Zero Local Configuration]
A --> E[Package Manager<br/>Homebrew/Chocolatey]
style C fill:#d4edda
style D fill:#d4edda
| الطريقة | قابلية التطبيق | الصعوبة | السيناريوهات الموصى بها | الأداء |
|---|---|---|---|---|
| Docker | متعدد المنصات | ⭐ | ⭐⭐⭐ تطوير سريع | ⚠️ عبء تشغيل طفيف |
| أطلس | الخدمات السحابية | ⭐⭐ | ⭐⭐⭐ التعاون بين أعضاء الفريق | ✅ التحسين المُدار |
| brew/apt Native | منصة واحدة | ⭐⭐ | ⭐⭐ بيئة الإنتاج | ✅ الأفضل |
| ملف .dmg/.exe الرسمي | واجهة رسومية | ⭐⭐⭐ | ⭐ للاستخدام لمرة واحدة | ✅ الأفضل |
(1) أربع طرق للتركيب
graph TB
A[MongoDB Installation Methods] --> B[Native Installation<br/>brew/apt/dmg/exe]
A --> C[Docker Container<br/>Recommended for Rapid Development]
A --> D[Atlas Cloud Services<br/>Zero Local Configuration]
A --> E[Package Manager<br/>Homebrew/Chocolatey]
style C fill:#d4edda
style D fill:#d4edda
| الطريقة | قابلية التطبيق | الصعوبة | السيناريوهات الموصى بها |
|---|---|---|---|
| Docker | متعدد المنصات | ⭐ | ⭐⭐⭐ تطوير سريع |
| أطلس | الخدمات السحابية | ⭐⭐ | ⭐⭐⭐ التعاون بين أعضاء الفريق |
| brew/apt Native | منصة واحدة | ⭐⭐ | ⭐⭐ بيئة الإنتاج |
| ملف .dmg/.exe الرسمي | واجهة رسومية | ⭐⭐⭐ | ⭐ للاستخدام لمرة واحدة |
(2) اختيار إصدار MongoDB
شرح المفهوم: تتبع MongoDB استراتيجية إصدار LTS (الدعم طويل الأمد)، حيث يتم دعم كل إصدار رئيسي لمدة تتراوح بين 3 و5 سنوات. عند اختيار الإصدار، يجب إعطاء الأولوية لإصدارات LTS على أحدث إصدار — فقد خضعت إصدارات LTS لاختبارات شاملة وتأتي مع ضمان طويل الأمد لتلقي تحديثات الأمان.
| الإصدار | تاريخ الإصدار | الحالة | حالات الاستخدام الموصى بها |
|---|---|---|---|
| MongoDB 8.0 | 2024 | أحدث إصدار مرشح لبرنامج الدعم طويل الأمد (LTS) | مشروع جديد |
| MongoDB 7.0 | 2023 | الإصدار الحالي ذو الدعم طويل الأمد (LTS) | المستخدم في هذا الدرس |
| MongoDB 6.0 | 2022 | الإصدار LTS السابق | التوافق أولاً |
| MongoDB 5.0 | 2021 | تقترب من نهاية دورة الحياة | غير موصى بها |
▶ المثال 1: أمر التحقق من الإصدار
# Inspection mongosh Version
mongosh --version
# mongosh 2.1.0
# Inspection mongod Server Version
mongod --version
# db version v7.0.5
# Through mongosh Check the server version
mongosh "mongodb://localhost:27017" --eval "db.version()"
# 7.0.5
4. التثبيت عبر Docker (موصى به)
نظرة عامة على المفهوم: يُعد Docker الطريقة الأكثر توصيةً لإعداد بيئة تطوير MongoDB. يقوم Docker بتجميع MongoDB وتبعياته في حاوية، مما يعزلها عن نظام الملفات والشبكة في الجهاز المضيف، وبالتالي يتيح إمكانية «التجميع مرة واحدة والتشغيل في أي مكان». مقارنةً بالتثبيت الأصلي، يقدم Docker المزايا التالية: الاتساق عبر الأنظمة الأساسية، ودعم إصدارات متعددة، وإلغاء تثبيت نظيف، وبدء تشغيل سريع للغاية (5–10 ثوانٍ).
كيفية العمل: حاوية Docker هي في الأساس بيئة تشغيل معزولة لعمليات نظام Linux. تستخدم حاوية MongoDB الصورة الرسمية (mongo:7.0)، التي تقوم بتشغيل العملية mongod داخليًا. يعمل تعيين المنافذ (-p 27017:27017) على إتاحة منافذ الحاوية للجهاز المضيف، بينما يعمل تثبيت وحدة التخزين (-v ~/mongodb-data:/data/db) على حفظ البيانات على الجهاز المضيف — مما يضمن عدم فقدان البيانات عند حذف الحاوية.
graph LR
A[Host Machine] --> B[Docker Engine]
B --> C[mongodb-dev Container]
C --> D[mongod Process<br/>Port 27017]
A --> E[~/mongodb-data<br/>Mounting Data Volumes]
E --> D
A --> F[mongosh Client<br/>Connect localhost:27017]
F --> D
style C fill:#d4edda
(1) 4.1 المتطلبات الأساسية
# Installation Docker Desktop
# macOS: Download https://www.docker.com/products/docker-desktop/
# Windows: Download + Enable WSL 2 Backend
# Linux: sudo apt install docker.io docker-compose
# Verification Docker Installation
docker --version
# Docker version 24.0.7, build afdd53b
(2) 4.2 سحب صورة MongoDB
# Get the latest stable version
docker pull mongo:7.0
# Pull a specific version(Recommendations)
docker pull mongo:7.0.5
# Pull an image with authentication(Recommended Production Environments)
docker pull mongo:7.0-auth
(3) 4.3 تشغيل حاوية MongoDB
# Standalone Development Mode(Not certified)
docker run -d \
--name mongodb-dev \
-p 27017:27017 \
-v ~/mongodb-data:/data/db \
--restart unless-stopped \
mongo:7.0
# Certified Production Model
docker run -d \
--name mongodb-prod \
-p 27017:27017 \
-v ~/mongodb-data:/data/db \
-e MONGO_INITDB_ROOT_USERNAME=admin \
-e MONGO_INITDB_ROOT_PASSWORD=YourSecurePass123 \
--restart unless-stopped \
mongo:7.0
# Verify the container's running status
docker ps
# CONTAINER ID IMAGE STATUS PORTS
# a1b2c3d4e5f6 mongo:7.0 Up 2 minutes 0.0.0.0:27017->27017/tcp
(4) 4.4 التحقق من الاتصال
# Use mongosh to connect
mongosh "mongodb://localhost:27017"
# In mongosh
db.runCommand({ ping: 1 })
# { ok: 1 }
(5) 4.5 الأوامر الشائعة في Docker
# View container logs
docker logs mongodb-dev
# Stop the container
docker stop mongodb-dev
# Start the container
docker start mongodb-dev
# Restart the container
docker restart mongodb-dev
# Enter the container
docker exec -it mongodb-dev mongosh
# Delete Container(Data Volume Retention)
docker rm mongodb-dev
# Delete Containers and Data Volumes(Use with caution! Data Loss)
docker rm -v mongodb-dev
5. التثبيت الأصلي لنظام macOS
(1) 5.1 تثبيت Homebrew
# Add MongoDB Official Tap
brew tap mongodb/brew
# Install the latest stable version
brew install mongodb-community@7.0
# Start MongoDB Services
brew services start mongodb-community@7.0
# Verification
mongosh --version
mongosh "mongodb://localhost:27017" --eval "db.runCommand({ ping: 1 })"
(2) 5.2 التشغيل اليدوي (دون استخدام brew services)
# Start mongod(Specify the data directory and log files)
mongod --dbpath ~/mongodb-data --logpath ~/mongodb.log --fork
# Verification
ps aux | grep mongod
# mongodb 12345 ... mongod --dbpath /Users/.../mongodb-data
▶ المثال 2: إتمام عملية تثبيت نظام macOS
# === 1. Installation Xcode Command Line Tools ===
xcode-select --install
# === 2. Installation Homebrew(If not yet) ===
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# === 3. Add MongoDB Tap ===
brew tap mongodb/brew
# === 4. Installation MongoDB ===
brew install mongodb-community@7.0
# === 5. Start the service ===
brew services start mongodb-community@7.0
# === 6. Connection Test ===
mongosh "mongodb://localhost:27017"
# === 7. The First Command ===
db.runCommand({ ping: 1 })
الإخراج:
TEXT 📖 للعرض فقط{ ok: 1 }
6. تثبيت نظام لينكس
أوبونتو / ديبيان
# 1. Import MongoDB GPG key
wget -qO - https://www.mongodb.org/static/pgp/server-7.0.asc | sudo apt-key add -
# 2. Add MongoDB repository
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list
# 3. Update Package Index
sudo apt update
# 4. Installation MongoDB
sudo apt install -y mongodb-org
# 5. Start the service
sudo systemctl start mongod
sudo systemctl enable mongod
# 6. Verification
sudo systemctl status mongod
mongosh --eval "db.runCommand({ ping: 1 })"
CentOS / RHEL / Fedora
# 1. Add MongoDB Yum repository
sudo tee /etc/yum.repos.d/mongodb-org-7.0.repo << 'EOF'
[mongodb-org-7.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/7.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-7.0.asc
EOF
# 2. Installation
sudo yum install -y mongodb-org
# 3. Start
sudo systemctl start mongod
sudo systemctl enable mongod
7. تثبيت نظام التشغيل ويندوز
(1) 7.1 أداة التثبيت MSI (الواجهة الرسومية)
1. Visit https://www.mongodb.com/try/download/community
2. Select "Windows" + "msi" + Version 7.0
3. Download MongoDB-windows-x86_64-7.0.x-signed.msi
4. Double-click to install:
✅ Complete Installation Type
✅ Install MongoDB as a Service
✅ Install MongoDB Compass(GUI Tools)
5. After installation is complete,MongoDB Automatic Action Windows Service Start
(2) 7.2 تثبيت Chocolatey
# 1. Installation Chocolatey(If not yet)
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
# 2. Installation MongoDB
choco install mongodb
# 3. Start
mongod --dbpath C:\data\db
# 4. Connect
mongosh "mongodb://localhost:27017"
▶ المثال 3: عملية تثبيت نظام ويندوز بالكامل
# === 1. Create a data directory ===
mkdir C:\data\db
# === 2. Start MongoDB ===
mongod --dbpath C:\data\db
# === 3. Connecting Another Device ===
mongosh "mongodb://localhost:27017"
# === 4. Test ===
db.runCommand({ ping: 1 })
الإخراج:
TEXT 📖 للعرض فقط{ ok: 1 }
8. تكوين خدمة MongoDB Atlas السحابية
نظرة عامة على المفهوم: MongoDB Atlas هي خدمة قاعدة بيانات سحابية رسمية ومُدارة بالكامل، متوفرة على المنصات السحابية الثلاث الرئيسية: AWS وAzure وGCP. تُعد Atlas الخيار الأمثل للتعاون بين الفرق وسيناريوهات النشر عبر الحدود — فهي لا تتطلب أي صيانة، وتوفر نسخًا احتياطية تلقائية، وتدعم النشر العالمي، وتشتمل على ميزات مراقبة مدمجة. توفر Atlas فئة مجانية بشكل دائم بسعة 512 ميغابايت (M0 Sandbox)، وهي كافية للتعلم والمشاريع الصغيرة.
كيفية العمل: يقوم Atlas تلقائيًا بنشر مجموعة نسخ متماثلة مكونة من 3 عقد على منصة السحابة. تتولى العقدة الأساسية معالجة طلبات الكتابة، بينما توفر العقدتان الثانويتان التكرار في القراءة والتحويل التلقائي في حالة الفشل. يقوم المستخدمون بإدارة المجموعة، وتكوين قوائم الشبكات المسموح بها، وإنشاء مستخدمي قاعدة البيانات من خلال وحدة التحكم على الويب الخاصة بـ Atlas. تدعم سلاسل الاتصال تنسيق mongodb+srv://، ويتم اكتشاف عقد المجموعة تلقائيًا عبر سجلات DNS SRV.
graph LR
A[Your App] --> B[Atlas Global Clusters<br/>3 Node Replica Set]
B --> C[Primary<br/>Reading and Writing]
B --> D[Secondary 1<br/>Read Redundancy]
B --> E[Secondary 2<br/>Read Redundancy]
B --> F[Automatic Backup<br/>PITR]
B --> G[Monitoring Alerts<br/>Performance Recommendations]
style B fill:#d4edda
(1) 8.1 إنشاء مجموعة حرة
1. Visit https://www.mongodb.com/cloud/atlas/register
2. Sign Up(Google / GitHub OAuth Fastest)
3. Select "Build a Cluster" → "Shared" → "M0 Sandbox"(Free)
4. Cloud Provider:AWS(Recommendations)
5. Region:
- Users in the Middle East:me-central-1 (UAE)
- Users in Brazil:sa-east-1 (São Paulo)
- Japanese users:ap-northeast-1 (Tokyo)
6. Cluster Name:Cluster0
7. Click "Create Cluster"(Waiting 1-3 minutes)
(2) 8.2 تكوين أذونات الوصول
Steps 1:Create a Database User
- Database Access → Add New Database User
- Username: alice
- Password: YourSecurePass123
- Database User Privileges: Read and write to any database
Steps 2:Configure the Network Whitelist
- Network Access → Add IP Address
- Select "Allow Access from Anywhere"(0.0.0.0/0)
⚠️ For development use only,The production environment should be limited to application servers. IP
(3) 8.3 استرداد سلسلة الاتصال
1. Database → Connect → Connect your application
2. Driver: Node.js
3. Version: 5.5 or later
4. Concatenate Strings:
mongodb+srv://alice:YourSecurePass123@cluster0.mongodb.net/mydb?retryWrites=true&w=majority
▶ المثال 4: الاتصال بمجموعة Atlas
# Use mongosh to connect Atlas
mongosh "mongodb+srv://cluster0.mongodb.net/mydb" --username alice
# Password: ********
# In mongosh
db.runCommand({ ping: 1 })
الإخراج:
TEXT 📖 للعرض فقط{ ok: 1 }
db.users.insertOne({ name: "Alice", email: "alice@example.com" })
الإخراج:
TEXT 📖 للعرض فقط{ acknowledged: true, insertedId: ObjectId('507f1f77bcf86cd799439011') }
db.users.find()
الإخراج:
TEXT 📖 للعرض فقط{ _id: ObjectId('...'), name: 'Alice', email: 'alice@example.com' }
9. عميل سطر الأوامر «mongosh»
نظرة عامة على المفهوم: mongosh هو عميل سطر الأوامر الرسمي لـ MongoDB (الذي حل محل برنامج mongo القديم بعد عام 2020). وهو يعمل على Node.js ويدعم صيغة JavaScript الحديثة، وتمييز الصيغة، والإكمال التلقائي، وتتبع مكدس الأخطاء. ويُعد mongosh الأداة الأكثر مباشرة للتفاعل مع MongoDB — حيث يمكن تنفيذ جميع عمليات قاعدة البيانات باستخدامه.
كيفية العمل: يتواصل mongosh مع خادم mongod عبر بروتوكول MongoDB Wire. بشكل افتراضي، يتصل بالمنفذ 27017 على الجهاز المحلي، لكنه يدعم أيضًا سلاسل اتصال Atlas والاتصالات المشفرة بواسطة TLS. يتضمن mongosh الكائن db (قاعدة البيانات الحالية) والأساليب العامة (show dbs، use، إلخ)؛ ويتم تنفيذ جميع العمليات باستخدام صيغة JavaScript.
graph LR
A[mongosh Client] --> B[Wire Protocol]
B --> C[mongod Server-side]
C --> D[WiredTiger Engine]
A --> A1[JavaScript Runtime]
A --> A2[Auto-Complete]
A --> A3[Syntax Highlighting]
style A fill:#cce5ff
| فئة الأمر | الأوامر الشائعة | الوصف |
|---|---|---|
| قاعدة البيانات | show dbs / use db / db.dropDatabase() |
عرض، تبديل، حذف |
| المجموعة | show collections / db.createCollection() / db.col.drop() |
إنشاء |
| المستند | insertOne/find/updateOne/deleteOne |
عمليات CRUD |
| المساعدة | help / db.help() / db.col.help() |
الوثائق المدمجة |
(1) تشغيل mongosh
# Connect to the default local port
mongosh
# Connect to a specified host and port
mongosh "mongodb://localhost:27017"
# Connect Atlas
mongosh "mongodb+srv://cluster0.mongodb.net/mydb" --username alice
# Connect and execute a single command
mongosh "mongodb://localhost:27017" --eval "db.runCommand({ ping: 1 })"
# Enable verbose Pattern(View the time taken by each command)
mongosh --verbose
(2) الأوامر الأساسية في Mongosh
// === Database Operations ===
show dbs // List all databases
use shopdb // Switch to shopdb Database(If it doesn't exist, create it implicitly)
db // Display the current database
db.dropDatabase() // Delete the current database
// === Set Operations ===
show collections // List all collections in the current database
db.createCollection("products") // Explicitly Creating Sets
db.products.drop() // Delete Set
// === Document Operations ===
db.products.insertOne({ sku: "PHONE-001", price: 599.99 })
db.products.find() // Search All Documents
db.products.find().pretty() // Formatted Output
db.products.countDocuments() // Count the number of documents
// === Help Command ===
help // mongosh Built-in Help
db.help() // Database Command Help
db.products.help() // Set Operations Help
(3) اختصارات لوحة المفاتيح في Mongosh
| مفتاح الاختصار | الوظيفة |
|---|---|
↑ / ↓ |
عرض سجل الأوامر |
Tab |
الإكمال التلقائي |
Ctrl + A |
الانتقال إلى الأعلى |
Ctrl + E |
الانتقال إلى نهاية السطر |
Ctrl + U |
حذف السطر بأكمله |
Ctrl + L مسح الشاشة |
|
Ctrl + C |
إلغاء الأمر الحالي |
Ctrl + D / exit |
الخروج من mongosh |
▶ المثال 5: ملف البرنامج النصي mongosh
# === Writing Scripts(setup-mongosh.js) ===
cat > setup-mongosh.js << 'EOF'
// Switch to shopdb
use shopdb;
// Create a User Set
db.users.insertMany([
{ name: "Alice", email: "alice@example.com", age: 28 },
{ name: "Bob", email: "bob@example.com", age: 32 },
{ name: "Charlie", email: "charlie@example.com", age: 25 }
]);
// Create a Product Collection
db.products.insertMany([
{ sku: "PHONE-001", title: "Phone X", price: 599.99, stock: 50 },
{ sku: "LAPTOP-001", title: "Laptop Y", price: 1299.99, stock: 20 }
]);
// Search All Users
print("Users:");
db.users.find().forEach(printjson);
// Search All Products
print("Products:");
db.products.find().forEach(printjson);
EOF
# === Run the script ===
mongosh "mongodb://localhost:27017" setup-mongosh.js
الإخراج:
TEXT 📖 للعرض فقطUsers: { _id: ObjectId('...'), name: 'Alice', email: 'alice@example.com', age: 28 } { _id: ObjectId('...'), name: 'Bob', email: 'bob@example.com', age: 32 } { _id: ObjectId('...'), name: 'Charlie', email: 'charlie@example.com', age: 25 } Products: { _id: ObjectId('...'), sku: 'PHONE-001', title: 'Phone X', price: 599.99, stock: 50 } { _id: ObjectId('...'), sku: 'LAPTOP-001', title: 'Laptop Y', price: 1299.99, stock: 20 }
10. ملحق VSCode لـ MongoDB
(1) 10.1 تثبيت المكونات الإضافية
1. Open VSCode
2. Extensions (Ctrl+Shift+X)
3. Search "MongoDB for VS Code"
4. Click Install(Official Plug-in,provided by MongoDB Inc.)
(2) 10.2 الاتصال بقاعدة البيانات
1. Click the sidebar MongoDB Icon
2. Click "Add Connection"
3. Enter the connection string:
- Local:mongodb://localhost:27017
- Atlas:mongodb+srv://cluster0.mongodb.net/mydb
4. Enter your username and password
5. Select a Database,Browse Collections
(3) 10.3 العمليات الشائعة
- Right-Click Menu → "View Documents":Browsing Data
- Right-Click Menu → "Insert Document":Insert Document
- Right-click the document → "Edit Document":Edit
- Right-click the document → "Delete Document":Delete
- Top Toolbar → "Playgrounds":Run mongosh Screenplay
▶ المثال 6: تشغيل الاستعلامات في «Playgrounds» في VSCode
// VSCode MongoDB Playground
use('shopdb');
db.users.aggregate([
{ $group: { _id: '$age', count: { $sum: 1 } } },
{ $sort: { _id: 1 } }
]);
الإخراج:
TEXT 📖 للعرض فقط{ _id: 25, count: 1 } { _id: 28, count: 1 } { _id: 32, count: 1 }
11. اختبار «بينغ» الأول
شرح المفهوم: db.runCommand({ ping: 1 }) هو أمر «heartbeat» في MongoDB، ويُستخدم للتحقق من أن الاتصال بين العميل والخادم يعمل بشكل صحيح. ويُعد اختبار ping الخطوة الأولى في إنشاء اتصال بـ MongoDB — قبل كتابة أي منطق أعمال، يجب عليك أولاً استخدام اختبار ping للتأكد من نجاح الاتصال. وهذا مبدأ أساسي في تصحيح أخطاء قواعد البيانات.
كيفية العمل: يرسل الأمر ping أمرًا ping إلى الخادم عبر بروتوكول MongoDB Wire. ويقوم الخادم بإرجاع { ok: 1 } للإشارة إلى نجاح الاتصال. ويُعد زمن استجابة الأمر ping مساويًّا لتأخير الذهاب والإياب في الشبكة مضافًا إليه زمن معالجة الخادم، ويمكن استخدامه لمراقبة جودة الشبكة. في Node.js، يُستخدم الأمر ping لفحص حالة نقاط النهاية (/healthz) واختبارات ما قبل الاتصال في CI/CD.
sequenceDiagram
participant App as Client
participant Mongo as MongoDB
App->>Mongo: db.runCommand({ ping: 1 })
Mongo-->>App: { ok: 1 }
Note over App,Mongo: Response Time = Network Latency
App->>Mongo: db.runCommand({ ping: 1 })
Mongo-->>App: { ok: 1, operationTime: ... }
| الغرض من أمر ping | الوصف |
|---|---|
| التحقق من الاتصال | التأكد من توفر الخدمة بعد الاتصال الأول |
| مراقبة زمن الاستجابة | قياس زمن الذهاب والإياب للشبكة |
| الفحص الصحي | /healthz الفحص الدوري لنقاط النهاية |
| فحوصات ما قبل النشر في إطار CI/CD | التحقق من توفر قاعدة البيانات قبل النشر |
(1) 11.1 لماذا يُعد اختبار «بينغ» مهمًا؟
db.runCommand({ ping: 1 }) هو أمر "heartbeat" في MongoDB:
- ✅ تأكد من نجاح الاتصال بقاعدة البيانات
- ✅ قياس وقت الاستجابة (مراقبة زمن انتقال الشبكة)
- ✅ لنقاط النهاية الخاصة بفحص الحالة (
/healthz) - ✅ لإجراء اختبارات ما قبل الاتصال في CI/CD
(2) 11.2 التنفيذ في Mongosh
// In mongosh
db.runCommand({ ping: 1 });
الإخراج:
TEXT 📖 للعرض فقط{ ok: 1 }
// Timestamped ping
const start = Date.now();
const result = db.runCommand({ ping: 1 });
const duration = Date.now() - start;
print(`Ping successful in ${duration}ms`);
printjson(result);
الإخراج:
TEXT 📖 للعرض فقطPing successful in 5ms { ok: 1 }
(3) 11.3 اختبار الاتصالات في Node.js
// ping-test.js
const { MongoClient } = require('mongodb');
async function testConnection() {
const client = new MongoClient('mongodb://localhost:27017');
try {
const start = Date.now();
await client.connect();
const result = await client.db('admin').command({ ping: 1 });
const duration = Date.now() - start;
console.log(`✅ Connected in ${duration}ms`);
console.log('Ping result:', result);
if (result.ok === 1) {
console.log('🎉 MongoDB connection is healthy!');
} else {
console.error('❌ Ping failed:', result);
}
} catch (err) {
console.error('❌ Connection error:', err.message);
process.exit(1);
} finally {
await client.close();
}
}
testConnection();
الإخراج:
TEXT 📖 للعرض فقط✅ Connected in 15ms Ping result: { ok: 1 } 🎉 MongoDB connection is healthy!
▶ المثال 7: النص الكامل لفحص الحالة الصحية
// health-check.js
const { MongoClient } = require('mongodb');
const mongoose = require('mongoose');
async function healthCheck() {
const results = {
native_driver: false,
mongoose: false,
timestamp: new Date().toISOString()
};
// 1. Testing Native Drivers
try {
const client = new MongoClient('mongodb://localhost:27017');
await client.connect();
const ping = await client.db('admin').command({ ping: 1 });
results.native_driver = ping.ok === 1;
await client.close();
console.log('✅ Native driver ping:', ping.ok === 1);
} catch (err) {
console.error('❌ Native driver ping failed:', err.message);
}
// 2. Test mongoose
try {
await mongoose.connect('mongodb://localhost:27017/test');
const adminDb = mongoose.connection.db.admin();
const ping = await adminDb.command({ ping: 1 });
results.mongoose = ping.ok === 1;
await mongoose.disconnect();
console.log('✅ Mongoose ping:', ping.ok === 1);
} catch (err) {
console.error('❌ Mongoose ping failed:', err.message);
}
console.log('\nHealth check results:', JSON.stringify(results, null, 2));
return results;
}
healthCheck();
الإخراج:
TEXT 📖 للعرض فقط✅ Native driver ping: true ✅ Mongoose ping: true Health check results: { "native_driver": true, "mongoose": true, "timestamp": "2026-07-01T10:00:00.000Z" }
12. حل المشكلات الشائعة المتعلقة بالتثبيت
(1) 12.1 مشكلات فشل الاتصال
| رسالة الخطأ | السبب | الحل |
|---|---|---|
ECONNREFUSED 127.0.0.1:27017 |
mongod لا يعمل | brew services start mongodb-community@7.0 |
MongoServerSelectionError: connection timeout |
مشكلة في الشبكة أو قائمة العناوين المسموح بها في Atlas غير مُعدة | أضف عنوان IP في «Atlas Network Access» |
Authentication failed |
اسم المستخدم أو كلمة المرور غير صحيحين | إعادة تعيين كلمة المرور أو إنشاء حساب جديد |
getaddrinfo ENOTFOUND cluster0.mongodb.net |
فشل تحليل عنوان DNS | تحقق من اتصالك بالشبكة أو استخدم عنوان IP |
Operation timed out |
تم حظره بواسطة جدار الحماية | فتح المنفذ 27017 |
(2) 12.2 فشل تشغيل حاوية دوكر
# Check the container logs to find the cause
docker logs mongodb-dev
# Common Mistakes:Port is in use
# Error: bind: address already in use
# Solutions 1:Processes that are occupying ports
lsof -i :27017
kill -9 <PID>
# Solutions 2:Switch to a different port
docker run -d --name mongodb-dev -p 27018:27017 mongo:7.0
mongosh "mongodb://localhost:27018"
(3) 12.3 مساحة القرص غير كافية
# Check Disk Space
df -h
# MongoDB Default disk space used by the data directory
du -sh ~/mongodb-data
# Cleanup Plan:Settings oplogSize Restrictions(Raid Mode)
mongod --oplogSize 1024
# or use WiredTiger Compression(Enabled by default)
mongod --wiredTigerCollectionConfig blockCompressor=zstd
▶ المثال 8: عملية استكشاف الأعطال وإصلاحها بالكامل
# === Steps 1:Inspection mongod Is it running? ===
ps aux | grep mongod | grep -v grep
# === Steps 2:Check Port Listening ===
lsof -iTCP:27017 -sTCP:LISTEN
# === Steps 3:Try connecting ===
mongosh "mongodb://localhost:27017"
# === Steps 4:View mongod Log ===
tail -50 /usr/local/var/log/mongodb/mongo.log
# === Steps 5:Restart the service ===
brew services restart mongodb-community@7.0
# === Steps 6:Test Again ===
mongosh "mongodb://localhost:27017" --eval "db.runCommand({ ping: 1 })"
الإخراج:
TEXT 📖 للعرض فقط{ ok: 1 }
❓ أسئلة شائعة
--memory --cpus)؛ (4) يُنصح باستخدام Kubernetes + StatefulSet في بيئات الإنتاج.+srv في سلسلة الاتصال؟mongodb+srv:// هو تنسيق سجل SRV لنظام أسماء النطاقات (DNS) يُستخدم في MongoDB Atlas لاكتشاف عقد المجموعة تلقائيًا. أما mongodb:// فهو التنسيق التقليدي، الذي يتطلب منك تحديد المضيف والمنفذ يدويًّا.📖 ملخص
- طرق تثبيت MongoDB: Docker (موصى به) / Atlas (خدمة سحابية) / التثبيت المباشر
- تشغيل Docker:
docker run -d --name mongodb-dev -p 27017:27017 mongo:7.0 - تقدم «أطلس» مجموعة M0 بسعة 512 ميغابايت مجانية إلى الأبد
- mongosh هو عميل سطر الأوامر الرسمي لـ MongoDB (الذي يحل محل غلاف mongo القديم)
db.runCommand({ ping: 1 })هو الأمر القياسي للتحقق من الاتصال- يدعم المكون الإضافي MongoDB لـ VSCode التصفح الرسومي وتشغيل البرامج النصية في «Playgrounds»
- المشكلات الشائعة في التثبيت: تعارضات المنافذ، ومساحة القرص، وجدران الحماية، وتكوين قائمة السماح
📝 تمارين
-
تمرين أساسي (⭐): قم بتشغيل حاوية MongoDB 7.0 باستخدام Docker، وقم بتعيين المنفذ 27017، ثم قم بالاتصال بنجاح باستخدام mongosh لتنفيذ
db.runCommand({ ping: 1 }). -
تمرين أساسي (⭐): قم بإنشاء مجموعة M0 مجانية في MongoDB Atlas، وقم بتكوين قائمة بيضاء لعناوين IP (0.0.0.0/0) ومستخدم قاعدة بيانات، ثم قم بالاتصال بـ Atlas باستخدام mongosh.
-
تمرين متقدم (⭐⭐): قم بتنفيذ
use shopdbوdb.products.insertOne({...})وdb.products.find().pretty()في mongosh لفهم آلية الإنشاء الضمني لقواعد البيانات والمجموعات. -
مشكلة متقدمة (⭐⭐): اكتب برنامجًا نصيًّا بلغة Node.js
ping-test.jsيستخدم برنامج التشغيل الأصليmongodbللاتصال بمثيل MongoDB محلي، ويُنفِّذ أمر ping، ويعرض زمن الاستجابة. -
تمرين متقدم (⭐⭐): قم بتثبيت المكون الإضافي MongoDB في VS Code، واتصل بمجموعة Atlas، وقم بتشغيل استعلام تجميعي في Playgrounds
db.users.aggregate([{$group: {_id: '$age', count: {$sum: 1}}}]). -
التحدي (⭐⭐⭐): استخدم Docker Compose لبدء تشغيل مجموعة نسخ متماثلة من MongoDB مكونة من 3 عقد (انظر الوثائق الرسمية)، وقم بتكوين برنامج نصي لبدء التشغيل لإنشاء المستخدمين وتهيئة البيانات تلقائيًا، وتحقق من حالة مجموعة النسخ المتماثلة
rs.status().