30 روز با Node - روز دوازدهم: انجام عملیات اصلی دیتابیس (CRUD) در Nodejs به کمک mongoDB

24 مرداد 1397
mongodb-nodejs

mongoDB چیست؟

خب، اول اینکه یک نوع دیتابیس است! منتها برخلاف دیتابیس‌های معروف، از نوع SQL و رابطه‌ای نیست. یک پایگاه داده‌ی سند-گرای متن‌باز، کارا، مقیاس‌پذیر، بدون نیاز به طرح‌بندی اولیه با تفکر چابکی توسعه‌گران که به زبان برنامه‌نویسی سی++ نوشته شده است. سند-گرا (document-oriented) بدین معناست که به جای اینکه همانند پایگاه‌های داده‌های رابطه‌ای کلاسیک، داده‌ها را در جداول ذخیره کند، داده‌های ساختار یافته را در اسنادی با قالبی پویا شبیه به json ذخیره‌سازی می‌کند. این قالب بی‌سون (BSON) نامیده می‌شود.

مزایا:

  1. قالب پویا (Dynamic schema): اگر قالبی انعطاف‌پذیر داشته باشیم، کاملا مناسب اسناد JSON در mongoDB خواهند بود این درحالی است که پیاده‌سازی آن در دیتابیس‌های رابطه‌ایی اصلا ساده نیست.
  2. مقیاس‌پذیری (Scalibility): بسیار مقیاس پذیر است.
  3. ارزان بودن: رایگان و بدون هزینه است.

پیش نیازهای نصب

  1. MongoDB: که از (اینجا) قابل دانلود است. اگر هنگام نصب مانگو و مراجعه به سایت اصلی آن، با خطای تحریم ایران مواجه شدید نسخه ۳٫۴٫۴ ویندوزی آن را از این آدرس می توانید دانلود نمائید.
  2. Node.js: که از (اینجا) می‌توانید دانلود کنید.
  3. NPM: مدیر پکیج همان وقت که نود جی‌ اس را نصب کردید، در دسترستان قرار گرفت.
  4. mongoDB (npm package): به کمک دستور زیر در ترمینال یا خط فرمان میتوان این پکیج را نصب نمود:
>npm install mongodb

ارتباط با دیتابیس

اولین قدم، استقرار یک ارتباط بین mongoDB و اپلیکیشن ما که به کمک نود جی‌ اس نوشته شده:
//Including the required packages
var mongo = require('mongodb');
//Establishing the connection
var new_db = "mongodb://localhost:27017/demo_db"

که در آن:

  • demo_db نام دیتابیسی است که قراراست ایجاد شود
  • 27017 شماره پورتی است که mongoDB تحت آن اجرا می‌شود
  • localhost مشخص می‌کند که درحال حاضر، دیتابیس به‌صورت محلی کار می‌کند.

اکنون به کمک متد connect ارتباط را برقرار می‌کنیم. Connect() یک متد داخلی است که برای ایجاد یک ارتباط با نمونه‌ای از کلاس MongoDB استفاده می‌شود و مقداری که برمی‌گرداند، رفرنس دیتابیس مرتبط شده است. در مثال زیر، یک نمونه‌ی جدید از کلاس MongoDB که در localhost درحال اجراست، نمونه‌سازی می‌شود و رفرنس به دیتابیس demo_db را برمی‌گرداند. به قطعه کد زیر دقت کنید:

//File Name is  : demo-db.js
//establishing the connection
mongo.connect(new_db ,(error , db) => {
	if (error){
		throw error;
	}
	console.log("Database demo_db created successfully");
	//To close the connection
	db.close();
});

با دستور زیر در ترمینال یا خط فرمان، قطعه کد بالا را اجرا میکنیم:

> node demo-db.js
Database demo_db created successfully

تبریک! شما با موفقیت ارتباطی را با mongodb به کمک نود جی‌ اس برقرار کردید.

درج (Insert) یا ایجاد (Create) داده در MongoDB

متد insertOne(): به کمک این متد داخلی، می‌توان داده‌ای را در کالکشن mongoDb درج نمود:

//Name of the file  : insert-mongo.js
mongo.connect(new_db , function(error , db){
	if (error){
		throw error;
	}
	
	var data = { name : "Dayush" , age : "25" , mobile : "1234567890" }
	
	db.collection("details").insertOne(data, (err , collection) => {
		if(err) throw err;
		console.log("Record inserted successfully");
		console.log(collection);
	});
});

اجرا و نتیجه اجرای کد فوق:

>node insert-mongo.js
Record inserted successfully
{ result: { ok: 1, n: 1 },
  connection: null,
  message: undefined,
  ops:
   [ { name: 'Daryush',
       age: '25',
       mobile: '1234567890',
       _id: 597073b2c6f60f5b3c23a1a5 } ],
  insertedCount: 1,
  insertedId: 597073b2c6f60f5b3c23a1a5 
}

خواندن (Read) داده‌ها از MongoDB

  1. متد findOne(): این متد داخلی برای خواندن اولین وقوع در کالکشن mongoDb است:
//name of the file : read-one.js
mongo.connect(new_db , function(error , db){
	if (error){
		throw error;
	}
	//findOne() reads the first occurance of any data from the database.
	db.collection("details").findOne({}, (err , collection) => {
		if(err) throw err;
		console.log("Record Read successfully");
		console.log(collection);
		db.close();
	});
});

قطعه کد فوق را اجرا می کنیم و نتیجه را می‌بینیم:

> node read-one.js
Record Read successfully
{ name: 'Nodejsera',
  age: '23',
  mobile: '9876543210',
  _id: 59706a56a4f6761e3cc22c98 }

2. متد find(): این متد تمام دادا‌ها را از کالکشن mongoDb می‌خواند:

//name of the file : read-all.js
mongo.connect(new_db , function(error , db){
	if (error){
		throw error;
	}
	
	//Read All the data from the "details" collection.
	db.collection("details").find({}).toArray( (err , collection) => {
		if(err) throw err;
		console.log("Record Read successfully");
		console.log(collection);
		db.close();
	});
});

اجرای قطعه کد فوق:

> node read-all.js
Record Read successfully
[ { name: 'Nodejsera',
    age: '23',
    mobile: '9876543210',
    _id: 59706a56a4f6761e3cc22c98 },
  { name: 'rishabhio',
    age: '25',
    mobile: '1234567890',
    _id: 59706c3771da112bd8b922dc },
  { name: 'ِDaryush',
    age: '25',
    mobile: '1234567890',
    _id: 597073b2c6f60f5b3c23a1a5 } ]

بروزرسانی (Update) یک سند در MongoDB

  1. متد updateOne(): به دنبال اولین وقوع حاصل از اجرای یک کوئری روی داده‌های mongodb می‌گردد و آن را بروزرسانی می‌کند:
//name of the file : update-one.js
mongo.connect(new_db ,(error , db) => {
	if (error){
		throw error;
	}
	//Query parameter is used to search the collection.
	var query = { name : "rishabhio" };
	//And When the query matches the data in the DB , "data" parameter is used to update the value.
	var data = { name : "nodejsera.com" , mobile : "1234567890" }
	//Accessing the collection using nodejs
	db.collection("details").updateOne(query , data, (err , collection) => {
		if(err) throw err;
		console.log("Record updated successfully");
		console.log(collection);
	});
});

و اجرای آن:

> node update-one.js
Record updated successfully
{ result: { ok: 1, n: 1, nModified: 1 },
  connection: null,
  message: undefined,
  modifiedCount: 1,
  upsertedId: null,
  upsertedCount: 0,
  matchedCount: 1 }

2. upddateMany(): یک متد داخلی mongodb که یک کوئری روی mongodb اجراکرده و تمام وقوعشان را آپدیت می‌کند.

//name of the file : update-all.js
mongo.connect(new_db ,(error , db) => {
	if (error){
		throw error;
	}
	
	//query store the search condition
	var query = { age : {$gt : "22" } };
	//data stores the updated value
	var data = { $set : {age : "above 22" } }
	//CREATING A COLLECTION IN MONGODB USING NODE.JS
	db.collection("details").updateMany(query , data, (err , collection) => {
		if(err) throw err;
		console.log(collection.result.nModified + " Record(s) updated successfully");	//It will console the number of rows updated
		console.log(collection);
		db.close();
	});
});

اجرای آن:

> node update-all.js
node updateMany-mongodb-nodejs.js
3 Record(s) updated successfully
{ 	result: 
		{ 
			ok: 1,
			n: 3,
			nModified: 3 
		},
	connection: null,
	message: undefined,
	modifiedCount: 3,
	upsertedId: null,
	upsertedCount: 0,
	matchedCount: 3 
 }

حذف (Delete) سند یا داده در MongoDB

  1. متد deleteOne():  یک متد داخلی mongodb برای حذف اولین وقوع حاصل از اجرای یک کوئری روی mongodb:
//name of the file : delete-one.js
mongo.connect(new_db ,(error , db) => {
	if (error){
		throw error;
	}
	//query stores the search condition	
	var query = { age : "above 22" };
	
	//Accessing a COLLECTION IN MONGODB USING NODE.JS
	db.collection("details").deleteOne(query , (err , collection) => {
		if(err) throw err;
		console.log(collection.result.n + " Record(s) deleted successfully");
		console.log(collection);
		db.close();
	});
});

و اجرای کد فوق:

> node delete-one.js
1 Record(s) deleted successfully
{ 
	result: 
		{ 
			ok: 1,
			n: 1
		},
	connection: null,
	message: undefined,
	deletedCount: 1 
}

2. متد deleteMany(): این هم یک متد داخلی دیگر، که تمام نتایج حاصل از وقوع یک کوئری روی کالکشن mangodb را حذف می‌کند:

//name of the file : delete-all.js
mongo.connect(new_db ,(error , db) => {
	if (error){
		throw error;
	}
	
	//Search query for deletion
	var query = { age : "above 22" };
	
	//Accessing the collection
	db.collection("details").deleteMany(query , (err , collection) => {
		if(err) throw err;
		console.log(collection.result.n + " Record(s) deleted successfully");
		console.log(collection);
		db.close();
	});
});

و اجرا:

> node delete-all.js
2 Record(s) deleted successfully
{ 
	result: 
		{ 
			ok: 1,
			n: 2
		},
	connection: null,
	message: undefined,
	deletedCount: 2 
}

خلاصه

در درس امروز از دوره آموزشی 30 روز با نود جی‌ اس، یاد گرفتیم چگونه به کمک نود جی‌ اس یک ارتباط با دیتابیس MongoDB برقرار کنیم. همچنین اعمال اصلی CRUD یا ایجاد/درج (Crud)، خواندن (Read)، بروزرسانی (Update) و حذف (Delete) را تمرین کردیم.

نویسنده شوید
دیدگاه‌های شما (1 دیدگاه)

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

بهادر
22 مهر 1397
سلام آموزش نصب و راه اندازی mongodb در ویندوز 10 نسخه 1709 را میخواستم

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.