English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
تحليل العمليات تعالج سجلات البيانات وتعيد النتائج المحسوبة. تحليل العمليات تجمع القيم من وثائق متعددة معًا وتسمح بإجراء各种 عمليات على البيانات المجمعة لتقديم نتيجة واحدة. في SQL، count(*) و group by يساويان التجميع في MongoDB.
للتحكم في التجميع في MongoDB، يجب استخدامه aggregate() الطريقة.
aggregate()جملة الأساس للطريقة هي-
>db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
في المجموعة، لديك البيانات التالية-
{ _id: ObjectId(7df78ad8902c) title: نظرة عامة على MongoDB description: MongoDB ليست قاعدة بيانات SQL by_user: oldtoolbag.com url: https://ar.oldtoolbag.com tags: ['mongodb', 'database', 'NoSQL'] likes: 100 }, { _id: ObjectId(7df78ad8902d) title: نظرة عامة على NoSQL description: قاعدة بيانات No SQL هي سريعة جدًا by_user: oldtoolbag.com url: https://ar.oldtoolbag.com tags: ['mongodb', 'database', 'NoSQL'] likes: 10 }, { _id: ObjectId(7df78ad8902e) title: نظرة عامة على Neo4j description: Neo4j هو قاعدة بيانات No SQL by_user: Neo4j url: https://www.neo4j.com tags: ['neo4j', 'database', 'NoSQL'], likes: 750 },
الآن، إذا كنت ترغب في عرض قائمة، توضح عدد الدروس التي كتبها كل مستخدم، فستستخدم ما يليaggregate()طريقة-
> db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}]) { "_id" : "oldtoolbag.com", "num_tutorial" : 2 } { "_id" : "Neo4j", "num_tutorial" : 1 } >
استعلام SQL المماثل للنموذج أعلاه سيكون select by_user, count(*) from mycol group by by_user.
في المثال السابق، قمنا بفرز حقلby_userتم فرز الوثائق، وفي كل مرة يتم فرزها بناءً على المستخدم، يتم زيادة القيمة المجمعة السابقة. إليك قائمة بالعبارات التجميعية المتاحة.
عبرة | وصف | مثال |
---|---|---|
$sum | حساب إجمالي. | db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}]) |
$avg | حساب القيمة المتوسطة | db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}]) |
$min | الحصول على أصغر قيمة من القيم المتباينة في المجموعة. | db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}]) |
$max | الحصول على أكبر قيمة من القيم المتباينة في المجموعة. | db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}]) |
$push | في مستندات النتائج، أضف قيمة إلى مجموعة. | db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}]) |
$addToSet | ارزشی را به یک آرایه اضافه میکند، اما کپی ایجاد نمیکند. | db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}]) |
$first | دادههای مستند اولین مستند بر اساس مرتبسازی منابع دریافت میشود. | db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}]) |
$last | دادههای مستند آخرین مستند بر اساس مرتبسازی منابع دریافت میشود | db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}]) |
پالسها در Unix و Linux معمولاً برای استفاده از خروجی یک دستور به عنوان ورودی دستور بعدی استفاده میشوند.
پالسهای جمعآوری MongoDB مستندات MongoDB را در یک پالس به پایان میرسانند و نتایج را به پالس بعدی منتقل میکنند. عملکرد پالس میتواند تکرار شود.
عبارت: مستند ورودی را پردازش کرده و خروجی میدهد. عبارت بدون حالت است و فقط برای محاسبه مستندات در پالسهای جمعآوری فعلی استفاده میشود و نمیتواند مستندات دیگر را پردازش کند.
در اینجا چندین عملکرد معمول در چارچوب جمعآوری معرفی میشود:
$project: ساختار مستند ورودی را تغییر میدهد. میتوان از آن برای تغییر نام فیلدها، اضافه کردن یا حذف فیلدها استفاده کرد، همچنین میتوان از آن برای ایجاد نتایج محاسباتی و مستندهای توالیمند استفاده کرد.
$match: برای فیلتر کردن دادهها استفاده میشود، فقط مستندات مشروط را خروجی میدهد. $match از عملیات استاندارد جستجوی MongoDB استفاده میکند.
$limit: برای محدود کردن تعداد مستندات بازگردانده شده توسط پالسهای جمعآوری MongoDB استفاده میشود.
$skip: در پالسهای جمعآوری، تعداد مشخصی مستند را از دست میدهد و مستندات باقیمانده را بازمیگرداند.
$unwind: یک فیلد نوع آرایه مستند را به چندین مستند مختلف تقسیم میکند، هر مستند شامل یک ارزش از آرایه است.
$group: مستندات موجود در مجموعه را به گروههای مختلف تقسیم میکند، که میتوان از آن برای نتایج آماری استفاده کرد.
$sort: ورودیهای مرتب شده را خروجی دهید.
$geoNear: خروجیهای مرتب شده به نزدیکی یک مکان جغرافیایی.
1、مثال $project
db.article.aggregate( { $project : { title : 1 , author : 1 , }} );
به این ترتیب در نتیجه فقط فیلدهای _id، tilte و author باقی میمانند، به صورت پیشفرض فیلد _id شامل میشود، اگر نمیخواهید _id شامل شود، میتوانید به این صورت عمل کنید:
db.article.aggregate( { $project : { _id : 0 , title : 1 , author : 1 }});
2. مثال $match
db.articles.aggregate( [ { $match : { score : { $gt : 70, $lte : 90 } } }, { $group: { _id: null, count: { $sum: 1 } } } ] );
$match يستخدم لجلب السجلات ذات الدرجات بين 70 و90، ثم إرسال السجلات المرضية إلى الخطوة التالية $group من وسيط التجميع.
3. مثال $skip
db.article.aggregate( { $skip : 5 });
بعد معالجة وسيط $skip، تم "تصفية" خمس مستندات أولى.