عمليات CRUD في قاعدة بيانات MongoDB
السلام عليكم ورحمة الله وبركاته ..
من بعد المقدمة حول قاعدة بيانات الـMongoDB حيث تم التعرف على:
- ما نوع قاعدة البيانات.
- كيفية تخزين البيانات فيها.
- العمليات البسيطة منها الـfind.
- الفروقات السطيحة مابين الـMongoDB و قواعد البيانات الأخرى من نوع RDBMS.
- لماذا انصح بالتحول إلى هذا النوع من قواعد البيانات.
إذا , اصبح هناك نظرة شاملة حول هذا النوع من قواعد البيانات و في هذا الدرس سنبدأ بأول العمليات المهمة والاساسية التي تسمى بـCRUD اختصارا إلى:
- Create
- Read
- Update
- Delete
نبدأ بسمه تعالى, افتح الـCMD او الـTerminal و اكتب الكوماند التالي لتفعيل خدمة الـMongoDB في جهازك
اقتباسmongod
بعد ذلك افتح CMD آخر واكتب الكوماند التالي للدخول على MongoDB Shell
اقتباسmongo
لندا بتصفح قواعد البيانات الموجوده مسبقا في بكتابه show dbs ستظهر قاعدة بيانات واحده اسمها local تحتوي على collection بإسم startup_log وهنا ننوه مره اخرى بأن:
-
اسم الـTable في الـMongoDB هو Collection
-
اسم الـRow في الـMongoDB هو Document
قم بإنشاء قاعدة بيانات جديدة و اختارها من خلال كوماند واحد
اقتباسuse DATABASE_NAME
و DATABASE_NAME تعني اسم قاعدة البيانات التي تريد عملها ولنفترض abdullashop
بعد انشاء قاعدة البيانات واختيارها نبدأ الآن بعمل collection بإسم مثلا customers
db.createCollection("customers")
//results
/* { "ok" : 1 } */
أولا: Create
الأن نأتي لموضوع الإضافه بداخل الكولكشن .. للإضافه هناك ثلاث خيارات ممكن استخدامها:
و في هذا الدرس سنستخدم insertMany لإضافة اكثر من document في collection بإستخدام كوماند واحد
Syntax
db.collection.insertMany(
{ [ <document 1> , <document 2>, ... ] },
{
writeConcern: <document>,
ordered: <boolean>
}
)
ماسنضيفه بداخل الكولكشن هو ( اعمل نسخ ومن ثم لصق في الـCMD)
db.customers.insertMany([
{
cus_name: "Abdulla Jassim",
payment: 10,
branch: "Hamad Town"
},
{
cus_name: "Mohammed Yousif",
payment: 12,
branch: "Saar"
},
{
cus_name: "Yassir Khalaf",
payment: 4.5,
branch: "Isa Town"
},
{
cus_name: "omar khalid",
payment: 7.2,
branch: "Manama"
},
{
cus_name: "Reem Ali",
payment: 34,
branch: "Riffa"
},
{
cus_name: "Fatima Talal",
payment: 9.6,
branch: "Manama"
}
])
// results //
/*
{
"acknowledged" : true,
"insertedIds" : [
ObjectId("5803b8ccf9f236bb5591f181"),
ObjectId("5803b8ccf9f236bb5591f182"),
ObjectId("5803b8ccf9f236bb5591f183"),
ObjectId("5803b8ccf9f236bb5591f184"),
ObjectId("5803b8ccf9f236bb5591f185"),
ObjectId("5803b8ccf9f236bb5591f186")
]
}
*/
ثانيا: Read
بعد عمل قاعدة البيانات , كولكشن و إضافه دوكيومنتس تأتي العمليه الثانية في الـCRUD وهي Read او Find في مصطلحات الـMongoDB وللبحث \ لقراءة جميع المدخلات التي في جدول customers تكون بالكماند التالي ( ملاحظة pretty() function فقط لعرض الناتج بشكل اوضح )
Syntax
db.collection.find()
db.cunstomers.find({}).pretty()
// results //
/*
{
"_id" : ObjectId("5803b8ccf9f236bb5591f181"),
"cus_name" : "Abdulla Jassim",
"payment" : 10,
"branch" : "Hamad Town"
}
{
"_id" : ObjectId("5803b8ccf9f236bb5591f182"),
"cus_name" : "Mohammed Yousif",
"payment" : 12,
"branch" : "Saar"
}
{
"_id" : ObjectId("5803b8ccf9f236bb5591f183"),
"cus_name" : "Yassir Khalaf",
"payment" : 4.5,
"branch" : "Isa Town"
}
{
"_id" : ObjectId("5803b8ccf9f236bb5591f184"),
"cus_name" : "omar khalid",
"payment" : 7.2,
"branch" : "Manama"
}
{
"_id" : ObjectId("5803b8ccf9f236bb5591f185"),
"cus_name" : "Reem Ali",
"payment" : 34,
"branch" : "Riffa"
}
{
"_id" : ObjectId("5803b8ccf9f236bb5591f186"),
"cus_name" : "Fatima Talal",
"payment" : 9.6,
"branch" : "Manama"
}
*/
تطبيقات حول db.collection.find
- استخرج اسماء جميع الأشخاص الذين دفعوا اكثر من 10 دنانير .. سيكون الكوماند
db.customers.find( { payment:{$gt: 10} }, { payment: 0, branch: 0 , _id: 0 } )
/*
{ payment:{$gt: 10} } = the condition where payment $gt greater than 10
{ payment: 0, branch: 0 , _id: 0 } = exclude these fields/cols from results
Resutls:
{ "cus_name" : "Mohammed Yousif" }
{ "cus_name" : "Reem Ali" }
*/
- استخرج جميع من يحتوي اسمه على المقطع al
db.customers.find({cus_name: /al/}).pretty()
// Results //
/*
{
"_id" : ObjectId("5803b8ccf9f236bb5591f183"),
"cus_name" : "Yassir Khalaf",
"payment" : 4.5,
"branch" : "Isa Town"
}
{
"_id" : ObjectId("5803b8ccf9f236bb5591f184"),
"cus_name" : "omar khalid",
"payment" : 7.2,
"branch" : "Manama"
}
{
"_id" : ObjectId("5803b8ccf9f236bb5591f186"),
"cus_name" : "Fatima Talal",
"payment" : 9.6,
"branch" : "Manama"
}
*/
ثالثا: Update
لتحديث دوكيومنت معين او عدد من الدوكيومنتس يعتمد على الحاله التي تواجهها:
- db.collection.update() - old
- db.collection.updateOne() New in version 3.2
- db.collection.updateMany() New in version 3.2
- db.collection.replaceOne() New in version 3.2
ولكن لنبدأ بابسط الاوامر
Syntax
db.collection.updateOne(filter, update, options)
وأمثلة على ذلك , تحديث مدفوعات من اسمه Abdulla إلى 14
db.customers.updateOne({"cus_name": "Abdulla Jassim"}, {$set: {"payment": 14} })
/*
set payment = 14 where cus_name= 'Abdulla Jassim'
Resutls If Match
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
Results If No Match
{ "acknowledged" : true, "matchedCount" : 0, "modifiedCount" : 0 }
*/
وبنفس الطريقة تستطيع تعديل اكثر من document دفعة واحده بإستخدام db.collection.updateMany
رابعا: Delete
في الحقيقة لا يوجد الكثير للحديث عنه في عملية الحذف لان الاتجاه والنتيجه واحده في كل الحالات حيث انه سيتم حذف الدوكيومنت التي تحدده
- db.collection.remove() - old
- db.collection.deleteOne() New in version 3.2
- db.collection.deleteMany() New in version 3.2
و ساينتكس الحذف سيكون Syntax
db.collection.deleteOne()
مثال على حذف احد الدوكيومنتس في Collection الـcustomers
db.customers.deleteOne({_id: ObjectId("5803b8ccf9f236bb5591f186") })
/*
Resutls If match
{ "acknowledged" : true, "deletedCount" : 1 }
Resutls If !match
{ "acknowledged" : true, "deletedCount" : 0
*/
مثال آخر على حذف اكثر من document دفعة واحده
db.customers.deleteMany({"payment": {$not: {$eq: 0 } } })
/*
Delete all document from customers where paymanet != 0
{$not: {$eq: 0 } } means != 0
Results If match
{ "acknowledged" : true, "deletedCount" : 5 }
Results If !match (the statment is right but no such documents found)
{ "acknowledged" : true, "deletedCount" : 0 }
*/
التعليقات (0)
لايوجد لديك حساب في عالم البرمجة؟
تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !