مستندات n8n
74+ نود
🍃

مونگو

MongoDB

مدیریت دیتابیس NoSQL MongoDB، CRUD و Aggregation Pipeline

دیتابیس
پیشرفته
۰ بازدید
n8n 1.0+

نمای کلی

نود MongoDB یکی از نودهای مهم n8n برای کار با دیتابیس‌های NoSQL است.

قابلیت‌های کلیدی:

  • اتصال به MongoDB و MongoDB Atlas
  • عملیات CRUD (Find, Insert, Update, Delete)
  • Aggregation Pipeline برای کوئری‌های پیچیده
  • پشتیبانی از Connection String و فیلدهای جداگانه
  • پشتیبانی از SSL/TLS
  • کار با Nested Documents و Arrays
  • پشتیبانی از Indexes

کاربردها:

  • ذخیره لاگ‌ها و رویدادها
  • مدیریت Session و Cache
  • ذخیره داده‌های IoT و سنسورها
  • سیستم‌های Content Management
  • Real-time Analytics
  • ذخیره پروفایل کاربران (Schema-less)
  • Chat و Messaging Systems

چرا MongoDB؟

  • Schema-less: نیاز به تعریف ساختار از قبل ندارید
  • مقیاس‌پذیر: Horizontal Scaling آسان
  • سرعت بالا: برای خواندن و نوشتن سریع
  • انعطاف‌پذیر: هر Document ساختار متفاوت داشته باشد
  • داده JSON: سازگار با APIها و وب

احراز هویت

احراز هویت MongoDB

روش 1: Connection String (توصیه می‌شود)

code
mongodb://username:password@host:27017/database

#### مثال‌ها:

code
# Local MongoDB
mongodb://localhost:27017/myapp

# با احراز هویت
mongodb://n8n_user:MyPassword@192.168.1.100:27017/myapp

# MongoDB Atlas
mongodb+srv://n8n_user:MyPassword@cluster0.abc123.mongodb.net/myapp?retryWrites=true&w=majority

# Replica Set
mongodb://host1:27017,host2:27017,host3:27017/myapp?replicaSet=myReplicaSet

روش 2: فیلدهای جداگانه

  1. 1Host: آدرس سرور (مثل localhost یا cluster0.abc123.mongodb.net)
  2. 2Port: 27017 (پیش‌فرض)
  3. 3Database: نام دیتابیس
  4. 4User: نام کاربری
  5. 5Password: رمز عبور

تنظیم MongoDB Atlas (ابری):

  1. 1به [MongoDB Atlas](https://cloud.mongodb.com) بروید
  2. 2Cluster بسازید (رایگان M0 موجود است)
  3. 3Database Access > Add Database User
  4. 4Network Access > Add IP Address (IP سرور n8n)
  5. 5Connect > Connect your application
  6. 6Connection String را کپی کنید

ایجاد کاربر MongoDB:

javascript
// اتصال به admin database
use admin

// ایجاد کاربر با دسترسی خواندن/نوشتن
db.createUser({
  user: "n8n_user",
  pwd: "StrongPassword123!",
  roles: [
    { role: "readWrite", db: "myapp" }
  ]
})

// کاربر فقط خواندن
db.createUser({
  user: "n8n_reader",
  pwd: "ReadOnlyPass!",
  roles: [
    { role: "read", db: "myapp" }
  ]
})

نکات امنیتی:

  • از MongoDB Atlas در Production استفاده کنید
  • IP Whitelist را تنظیم کنید
  • از Connection String با SRV استفاده کنید
  • TLS/SSL را فعال کنید
  • کاربر با حداقل دسترسی لازم بسازید

عملیات‌های موجود

1

find

جستجو و خواندن Documents از Collection

2

insertOne

درج یک Document جدید

3

insertMany

درج چندین Document همزمان

4

updateOne

به‌روزرسانی اولین Document مطابق فیلتر

5

deleteOne

حذف اولین Document مطابق فیلتر

6

aggregate

اجرای Aggregation Pipeline برای تحلیل داده

کاربردهای متداول

1. ذخیره لاگ فعالیت‌ها

ذخیره هر رویداد به عنوان Document:

code
هر رویداد → MongoDB (Insert One)
  - Collection: activity_logs
  - Document:
    {
      "userId": "{{$json.userId}}",
      "action": "{{$json.action}}",
      "details": {{$json.details}},
      "ip": "{{$json.ip}}",
      "userAgent": "{{$json.userAgent}}",
      "timestamp": "{{$now.toISO()}}"
    }

2. مدیریت Session کاربران

ذخیره و بررسی Session:

code
Webhook (Login)
  → MongoDB (Insert One)
    Collection: sessions
    {
      "userId": "{{$json.userId}}",
      "token": "{{$json.token}}",
      "expiresAt": "{{$now.plus({hours: 24}).toISO()}}",
      "device": "{{$json.device}}"
    }

Webhook (Check Session)
  → MongoDB (Find)
    Collection: sessions
    Query: {
      "token": "{{$json.token}}",
      "expiresAt": {"$gt": "{{$now.toISO()}}"}
    }

3. سیستم Cache

ذخیره نتایج API با TTL:

code
Webhook (درخواست)
  → MongoDB (Find)
    Collection: cache
    Query: {"key": "{{$json.cacheKey}}"}
  → IF (نتیجه پیدا شد و منقضی نشده)
    → True: برگرداندن از Cache
    → False:
      → HTTP Request (فراخوانی API اصلی)
      → MongoDB (Update One, upsert: true)
        Filter: {"key": "{{$json.cacheKey}}"}
        Update: {
          "$set": {
            "value": {{$json.result}},
            "expiresAt": "{{$now.plus({minutes: 30}).toISO()}}"
          }
        }

4. آمار و گزارش با Aggregation

گزارش فروش ماهانه:

code
Schedule (اول هر ماه) → MongoDB (Aggregate)
  Collection: orders
  Pipeline: [
    {"$match": {"status": "completed"}},
    {"$group": {
      "_id": {"$month": "$createdAt"},
      "totalSales": {"$sum": "$amount"},
      "orderCount": {"$sum": 1},
      "avgOrder": {"$avg": "$amount"}
    }},
    {"$sort": {"_id": -1}},
    {"$limit": 12}
  ]
  → Set (فرمت فارسی)
  → Telegram (ارسال گزارش)

5. جستجوی محصولات

API جستجو با فیلتر:

code
Webhook (جستجو) → MongoDB (Find)
  Collection: products
  Query: {
    "$and": [
      {"name": {"$regex": "{{$json.keyword}}", "$options": "i"}},
      {"price": {"$gte": {{$json.minPrice}}, "$lte": {{$json.maxPrice}}}},
      {"category": "{{$json.category}}"},
      {"inStock": true}
    ]
  }
  Sort: {"price": 1}
  Limit: 20
  → Respond to Webhook

6. سیستم نظرات

ذخیره و خواندن نظرات:

code
Webhook (نظر جدید) → MongoDB (Insert One)
  Collection: reviews
  {
    "productId": "{{$json.productId}}",
    "userId": "{{$json.userId}}",
    "rating": {{$json.rating}},
    "comment": "{{$json.comment}}",
    "createdAt": "{{$now.toISO()}}"
  }

-- خواندن نظرات یک محصول با آمار:
MongoDB (Aggregate)
  Pipeline: [
    {"$match": {"productId": "product123"}},
    {"$group": {
      "_id": null,
      "avgRating": {"$avg": "$rating"},
      "totalReviews": {"$sum": 1},
      "reviews": {"$push": "$$ROOT"}
    }}
  ]

7. Chat System

ذخیره و خواندن پیام‌ها:

code
Webhook (پیام جدید) → MongoDB (Insert One)
  Collection: messages
  {
    "roomId": "{{$json.roomId}}",
    "sender": "{{$json.userId}}",
    "text": "{{$json.message}}",
    "type": "text",
    "read": false,
    "createdAt": "{{$now.toISO()}}"
  }

-- خواندن پیام‌های یک اتاق:
MongoDB (Find)
  Collection: messages
  Query: {"roomId": "{{$json.roomId}}"}
  Sort: {"createdAt": -1}
  Limit: 50

8. شمارنده بازدید

افزایش خودکار بازدید:

code
Webhook (بازدید صفحه) → MongoDB (Update One)
  Collection: page_views
  Filter: {"pageId": "{{$json.pageId}}"}
  Update: {
    "$inc": {"views": 1},
    "$set": {"lastViewed": "{{$now.toISO()}}"},
    "$push": {"visitors": {"ip": "{{$json.ip}}", "date": "{{$now.toISO()}}"}}
  }
  Upsert: true

9. داده IoT و سنسورها

ذخیره داده سنسورها:

code
MQTT/Webhook (داده سنسور) → MongoDB (Insert One)
  Collection: sensor_data
  {
    "sensorId": "{{$json.sensorId}}",
    "temperature": {{$json.temp}},
    "humidity": {{$json.humidity}},
    "timestamp": "{{$now.toISO()}}"
  }

10. Soft Delete

حذف نرم رکوردها:

code
Webhook (حذف) → MongoDB (Update One)
  Collection: users
  Filter: {"_id": "{{$json.userId}}"}
  Update: {
    "$set": {
      "deletedAt": "{{$now.toISO()}}",
      "isActive": false
    }
  }

نکات حرفه‌ای

نکات حرفه‌ای

  1. 1Query Operators: عملگرهای مقایسه:
json
{"age": {"$gt": 18}}           // بزرگتر از
   {"age": {"$gte": 18}}          // بزرگتر مساوی
   {"age": {"$lt": 30}}           // کوچکتر از
   {"price": {"$in": [100, 200]}} // در لیست
   {"status": {"$ne": "deleted"}} // نامساوی
   {"name": {"$regex": "ali", "$options": "i"}} // Regex
  1. 1Update Operators: عملگرهای به‌روزرسانی:
json
{"$set": {"name": "Ali"}}         // تنظیم مقدار
   {"$unset": {"temp": ""}}          // حذف فیلد
   {"$inc": {"views": 1}}            // افزایش
   {"$push": {"tags": "new"}}        // اضافه به آرایه
   {"$pull": {"tags": "old"}}        // حذف از آرایه
   {"$addToSet": {"tags": "unique"}} // اضافه بدون تکرار
   {"$rename": {"old": "new"}}       // تغییر نام فیلد
  1. 1Projection: فقط فیلدهای لازم:
json
{"name": 1, "email": 1, "_id": 0}
  1. 1Aggregation Stages: مراحل Pipeline:
json
{"$match": {}}      // فیلتر
   {"$group": {}}      // گروه‌بندی
   {"$sort": {}}       // مرتب‌سازی
   {"$limit": 10}      // محدود کردن
   {"$skip": 20}       // رد کردن
   {"$project": {}}    // انتخاب فیلد
   {"$unwind": "$arr"} // باز کردن آرایه
   {"$lookup": {}}     // JOIN
  1. 1Lookup (JOIN):
json
{
     "$lookup": {
       "from": "customers",
       "localField": "customerId",
       "foreignField": "_id",
       "as": "customer"
     }
   }
  1. 1Index Strategy:
javascript
// Single field
   db.users.createIndex({"email": 1})

   // Compound
   db.orders.createIndex({"status": 1, "createdAt": -1})

   // TTL (حذف خودکار)
   db.sessions.createIndex({"expiresAt": 1}, {expireAfterSeconds: 0})

   // Text (جستجوی متنی)
   db.articles.createIndex({"title": "text", "content": "text"})
  1. 1TTL Index: حذف خودکار رکوردهای قدیمی:
javascript
// حذف Sessions بعد از 24 ساعت
   db.sessions.createIndex(
     {"createdAt": 1},
     {expireAfterSeconds: 86400}
   )
  1. 1Pagination: صفحه‌بندی:
json
// صفحه 3 (هر صفحه 20 رکورد)
   Skip: 40
   Limit: 20
   Sort: {"createdAt": -1}
  1. 1Bulk Operations: عملیات دسته‌ای سریع‌تر از تکی.
  1. 1Connection Pooling: اگر درخواست زیاد دارید، maxPoolSize را تنظیم کنید:
code
mongodb://user:pass@host:27017/db?maxPoolSize=50
  1. 1Backup خودکار:
code
Schedule (هر شب) → Bash (mongodump)
      → Google Drive (آپلود بک‌آپ)
  1. 1دسترسی به ObjectId در n8n:
javascript
// ID Document
    {{$json._id}}

    // تبدیل string به ObjectId در کوئری
    {"_id": {"$oid": "{{$json.id}}"}}
  1. 1فرمت تاریخ:
javascript
// ذخیره تاریخ
    {"createdAt": {"$date": "{{$now.toISO()}}"}}
  1. 1Monitoring: از MongoDB Compass برای مانیتورینگ ویژوال استفاده کنید.
  1. 1Schema Validation: (اختیاری)
javascript
db.createCollection("orders", {
      validator: {
        $jsonSchema: {
          bsonType: "object",
          required: ["customerId", "amount"],
          properties: {
            amount: {bsonType: "number", minimum: 0}
          }
        }
      }
    })

رفع مشکلات

خطاهای رایج

1. خطای "Connection timeout"

علت: MongoDB در دسترس نیست

راه‌حل

  • بررسی وضعیت MongoDB: sudo systemctl status mongod
  • Host و Port را بررسی کنید
  • برای Atlas: IP را Whitelist کنید
  • Firewall: پورت 27017 باز باشد
  • Connection String: آدرس صحیح استفاده شود

2. خطای "Authentication failed"

علت: اطلاعات کاربری اشتباه

راه‌حل

  • Username/Password را بررسی کنید
  • دیتابیس Authentication درست باشد (authSource=admin)
  • Connection String:
code
mongodb://user:pass@host:27017/mydb?authSource=admin

3. خطای "Namespace not found"

علت: Collection وجود ندارد

راه‌حل

  • نام Collection را بررسی کنید (Case-sensitive)
  • MongoDB در Insert خودکار Collection می‌سازد
  • لیست Collections:
javascript
db.getCollectionNames()

4. خطای "Document exceeds max size"

علت: اندازه Document بیش از 16MB

راه‌حل

  • فایل‌های بزرگ را در GridFS ذخیره کنید
  • داده را به Documents کوچکتر تقسیم کنید
  • Binary data را جداگانه ذخیره کنید

5. خطای "E11000 duplicate key"

علت: مقدار Unique Index تکراری

راه‌حل

  • قبل از Insert بررسی کنید رکورد موجود نیست
  • از updateOne با upsert: true استفاده کنید
  • Index Unique را بررسی کنید:
javascript
db.collection.getIndexes()

6. خطای "Query timeout" (Slow Query)

علت: کوئری بهینه نیست

راه‌حل

  • Index اضافه کنید:
javascript
db.collection.createIndex({"email": 1})
  db.collection.createIndex({"status": 1, "createdAt": -1})
  • از .explain() برای تحلیل استفاده کنید
  • Projection استفاده کنید (فقط فیلدهای لازم)

7. خطای "Network Error" با Atlas

علت: IP مجاز نیست

راه‌حل

  • MongoDB Atlas > Network Access
  • IP سرور n8n را اضافه کنید
  • یا 0.0.0.0/0 برای همه (فقط تست)
اشتراک‌گذاری:

آیا این مستندات مفید بود؟