عمليات CRUD في قاعدة بيانات MongoDB

AbdullaScriptمنذ 8 سنوات

السلام عليكم ورحمة الله وبركاته ..

من بعد المقدمة حول قاعدة بيانات الـMongoDB حيث تم التعرف على:

  • ما نوع قاعدة البيانات.
  • كيفية تخزين البيانات فيها.
  • العمليات البسيطة منها الـfind.
  • الفروقات السطيحة مابين الـMongoDB و قواعد البيانات الأخرى من نوع RDBMS.
  • لماذا انصح بالتحول إلى هذا النوع من قواعد البيانات.

 

إذا , اصبح هناك نظرة شاملة حول هذا النوع من قواعد البيانات و في هذا الدرس سنبدأ بأول العمليات المهمة والاساسية التي تسمى بـCRUD اختصارا إلى:

  1. Create
  2. Read
  3. Update
  4. Delete

 

نبدأ بسمه تعالى, افتح الـCMD او الـTerminal و اكتب الكوماند التالي لتفعيل خدمة الـMongoDB في جهازك

اقتباس

mongod

 

بعد ذلك افتح CMD آخر واكتب الكوماند التالي للدخول على MongoDB Shell

اقتباس

mongo

بعد الدخول على الـMongoDB Shell لمعلومات اكثر اكتب help

 

لندا بتصفح قواعد البيانات الموجوده مسبقا في بكتابه 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

لتحديث دوكيومنت معين او عدد من الدوكيومنتس يعتمد على الحاله التي تواجهها:

 

ولكن لنبدأ بابسط الاوامر

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 }
*/

 

كلمات دليلية:
1
إعجاب
3969
مشاهدات
0
مشاركة
0
متابع
متميز
محتوى رهيب

التعليقات (0)

لايوجد لديك حساب في عالم البرمجة؟

تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !