راهنمای چارچوب جمع آوری MongoDB

مونگودب چارچوب تجمع ابزاری قدرتمند است که به شما امکان می دهد داده های ذخیره شده در اسناد MongoDB را پردازش و تغییر دهید. این امکان دستکاری داده های پیچیده مانند فیلتر ، گروه بندی ، مرتب سازی و پیوستن به داده ها را به روشی انعطاف پذیر و کارآمد فراهم می کند. چارچوب جمع آوری برای کارهایی مانند ایجاد گزارش ، انجام تجزیه و تحلیل داده ها و تبدیل داده ها در MongoDB ضروری است.
در این مقاله یک راهنمای کامل و دقیق برای چارچوب تجمع MongoDB، توضیح مراحل کلیدی ، اپراتورها ، نحو و نمونه های دنیای واقعی. ما در هر مرحله تجمیع ، نحوه عملکرد آن و اینکه خروجی برای هر مثال به نظر می رسد ، قدم می زنیم.
1. تجمع در MongoDB چیست؟
تجمع در MongoDB به فرآیند تبدیل و ترکیب داده ها از چندین اسناد به یک نتیجه معنی دار اشاره دارد. شبیه به GROUP BY
عملیات در SQL اما بسیار انعطاف پذیر و قدرتمندتر است.
MongoDB روشهای مختلفی را برای انجام تجمع ارائه می دهد ، اما خط لوله تجمع متداول ترین و قدرتمندترین روش است. خط لوله جمع آوری داده ها را با عبور از آن در چندین مرحله پردازش می کند که هر یک عملیات خاص را روی داده ها انجام می دهند.
2. خط لوله جمع آوری
خط لوله تجمع شامل یک دنباله از مراحل است که هر یک داده ها را به نوعی تغییر می دهند. داده ها در این مراحل به صورت متوالی جریان می یابد و هر مرحله از مرحله قبلی خروجی را دریافت می کند.
نحو اساسی:
db.collection.aggregate([
{ stage1 },
{ stage2 },
{ stage3 },
...
])
هر مرحله در آن محصور شده است {}
و چندین مرحله در یک آرایه منتقل می شود. داده ها گام به گام پردازش می شوند و هر مرحله بر روی نتایج قبلی کار می کند.
مراحل کلیدی در خط لوله جمع آوری
-
مسابقه: داده ها را بر اساس شرایط فیلتر می کند (مشابه SQL
WHERE
). -
گروه $: اسناد گروه هایی بر اساس یک زمینه و انجام عملیات تجمیع (مشابه SQL
GROUP BY
). - $: با انتخاب و تغییر نام زمینه ، داده ها را تغییر شکل می دهد.
- $: اسناد را به ترتیب مشخص مرتب می کند.
- حد مجاز: تعداد اسناد منتقل شده به مرحله بعدی را محدود می کند.
- $ پرش: تعداد مشخصی از اسناد را رد می کند.
- $ جستجو: اجرا پیوستن به بیرونی بین دو مجموعه.
3. مراحل تجمع توضیح داده شده است
مرحله مسابقه 3.1 $
در $match
مرحله اسناد را بر اساس یک شرایط مشخص فیلتر می کند. معادل آن است WHERE
بند در SQL.
نحو:
{
$match: { field: value }
}
مثال:
اسناد را فیلتر کنید که در آن age
بیشتر از 30 است:
db.users.aggregate([
{ $match: { age: { $gt: 30 } } }
])
خروجی:
[
{ "_id": 1, "name": "Alice", "age": 35 },
{ "_id": 2, "name": "Bob", "age": 40 }
]
مرحله گروهی 3.2 دلار
در $group
اسناد گروههای مرحله ای بر اساس یک زمینه خاص و به شما امکان می دهد عملیات تجمیعی مانند انجام دهید sum
با avg
با count
، و غیره
نحو:
{
$group: {
_id: <expression>,
field1: { <operator>: <expression> },
field2: { <operator>: <expression> }
}
}
مثال:
کاربران گروه توسط آنها age
و میانگین را محاسبه کنید salary
برای هر گروه سنی:
db.users.aggregate([
{
$group: {
_id: "$age", // Group by age
averageSalary: { $avg: "$salary" }
}
}
])
خروجی:
[
{ "_id": 25, "averageSalary": 5000 },
{ "_id": 30, "averageSalary": 6000 },
{ "_id": 35, "averageSalary": 7000 }
]
3.3 $ مرحله پروژه
در $project
مرحله با انتخاب و یا تغییر نام زمینه ها ، اضافه کردن زمینه های جدید یا حذف زمینه ها ، هر سند را تغییر می دهد. شبیه به SELECT
بند در SQL.
نحو:
{
$project: {
field1: 1,
field2: 0,
newField: { <expression> }
}
}
مثال:
فقط پروژه name
وت age
زمینه ها ، و یک زمینه جدید ایجاد کنید ageInMonths
:
db.users.aggregate([
{
$project: {
name: 1,
age: 1,
ageInMonths: { $multiply: ["$age", 12] }
}
}
])
خروجی:
[
{ "name": "Alice", "age": 25, "ageInMonths": 300 },
{ "name": "Bob", "age": 30, "ageInMonths": 360 }
]
مرحله مرتب سازی 3.4 $
در $sort
مرحله اسناد را به ترتیب صعودی یا نزولی بر اساس یک زمینه یا زمینه سفارش می دهد.
نحو:
{
$sort: { field: 1 } // 1 for ascending, -1 for descending
}
مثال:
مرتب سازی کاربران توسط age
به ترتیب نزولی:
db.users.aggregate([
{ $sort: { age: -1 } }
])
خروجی:
[
{ "_id": 2, "name": "Bob", "age": 30 },
{ "_id": 1, "name": "Alice", "age": 25 }
]
مرحله حد مجاز 3.5 دلار
در $limit
مرحله تعداد اسناد منتقل شده به مرحله بعدی خط لوله را محدود می کند. این برای صفحه بندی و محدود کردن تعداد نتایج مفید است.
نحو:
{
$limit: <number>
}
مثال:
نتیجه را به 5 سند محدود کنید:
db.users.aggregate([
{ $limit: 5 }
])
مرحله پرش 3.6 $
در $skip
مرحله تعداد مشخصی از اسناد را رد می کند و اسناد باقیمانده را به مرحله بعدی خط لوله منتقل می کند. این برای اهداف صفحه بندی مفید است.
نحو:
{
$skip: <number>
}
مثال:
از 5 سند اول پرش کنید:
db.users.aggregate([
{ $skip: 5 }
])
3.7 $ مرحله جستجو (پیوستن)
در $lookup
از مرحله برای انجام a استفاده می شود پیوستن به بیرونی بین دو مجموعه. شبیه SQL است JOIN
عملیات و به شما امکان می دهد داده ها را از مجموعه های مختلف ترکیب کنید.
نحو:
{
$lookup: {
from: "other_collection", // The collection to join
localField: "field_in_local_collection", // Field from the local collection
foreignField: "field_in_foreign_collection", // Field from the foreign collection
as: "output_field" // The name of the field to store the results
}
}
مثال:
پیوستن users
با orders
:
db.users.aggregate([
{
$lookup: {
from: "orders", // The collection to join
localField: "order_id", // Field in `users` collection
foreignField: "_id", // Field in `orders` collection
as: "order_details" // Name of the new field in the output
}
}
])
خروجی:
[
{
"_id": 1,
"name": "Alice",
"order_id": 101,
"order_details": [
{ "_id": 101, "product": "Laptop" },
{ "_id": 102, "product": "Phone" }
]
},
{
"_id": 2,
"name": "Bob",
"order_id": 102,
"order_details": [{ "_id": 102, "product": "Phone" }]
}
]
پایان
مونگودب چارچوب تجمع روشی قدرتمند و انعطاف پذیر برای دستکاری و پردازش داده ها فراهم می کند. با استفاده از مراحل تجمع مانند $match
با $group
با $project
با $sort
با $limit
وت $lookup
برای دستیابی به نتایج متنوعی می توانید خطوط لوله پردازش داده های پیچیده ایجاد کنید.
از طریق خط لوله جمع آوری ، می توانید داده ها را فیلتر ، تبدیل ، گروه بندی و پیوست ، و مجموعه ای از ابزارهای غنی را برای استخراج بینش های معنی دار از مجموعه های MongoDB خود فراهم می کنید.
این راهنما مراحل و عملیات اساسی را در چارچوب تجمع MongoDB در بر می گیرد و نمونه ها و توضیحاتی در مورد نحوه استفاده مؤثر از آنها ارائه می دهد. این که آیا شما در حال انجام نمایش داده شدگان ساده یا تحولات پیچیده داده هستید ، چارچوب جمع آوری یک مؤلفه اصلی MongoDB است که می تواند به شما در دستیابی به اهداف خود کمک کند.