از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
مقدمه ای در سطح مبتدی بر MongoDB با Node.js در این مقاله قصد داریم در مورد روش استفاده از پایگاه داده MongoDB با Node.js صحبت کنیم. چند راه برای انجام این کار وجود دارد، از جمله رویکرد محبوب – استفاده از کتابخانه مدلسازی شی. Mongoose نمونه ای از چنین کتابخانه ای در Node.js است، با این حال، ما…
سرفصلهای مطلب
معرفی
در این مقاله قصد داریم در مورد روش استفاده از آن صحبت کنیم MongoDB پایگاه داده با Node.js. چند راه برای انجام این کار وجود دارد، از جمله یک رویکرد محبوب – استفاده از یک کتابخانه مدلسازی شی. مانگوس نمونه ای از چنین کتابخانه ای در Node.js است، با این حال، ما از درایور رسمی MongoDB برای Node.js استفاده خواهیم کرد.
در این مقاله، ما به یک سرور MongoDB متصل می شویم، اسناد را ایجاد می کنیم، آنها را از پایگاه داده بازیابی می کنیم و در نهایت تعدادی را حذف می کنیم.
این کار از طریق چند اسکریپت انجام می شود، اگرچه معمولاً آنها را به جای داشتن آنها در اسکریپت های مستقل با یک وب سرور/برنامه ادغام می کنید.
MongoDB چیست؟
MongoDB یک کراس پلتفرم (اجرا می شود روی سیستم عامل های متعدد)، سند محور سامانهی مدیریت پایگاه داده (DBMS). MongoDB همچنین یک پایگاه داده NoSQL است، به این معنی که از SQL برای انجام عملیات استفاده نمی کند روی یک پایگاه داده
MongoDB از اسنادی استفاده می کند که در فرمت JSON مانند هستند که به عنوان شناخته می شوند BSON، که کدگذاری باینری JSON است.
این به عنوان یک پروژه منبع باز توسط MongoDB Inc. تحت عنوان توسعه یافته است مجوز عمومی سمت سرور.
Node و MongoDB به خوبی با هم کار می کنند، تا حدی به این دلیل که Mongo از موتور جاوا اسکریپت ساخته شده در پایگاه داده استفاده می کند زیرا جاوا اسکریپت در مدیریت اشیاء JSON خوب است.
در مقایسه با پایگاه داده های دیگر، مانند MySQL، MongoDB برای ذخیره انواع خاصی از داده ها سریع است و می تواند به طور خودکار مقیاس شود. پیاده سازی و اجرا شدن آن بسیار ساده است.
با توجه به اینکه Mongo یک پایگاه داده NoSQL است، روش خاص خود را برای ذخیره داده ها دارد. در اینجا برخی از ساختارهایی که ساختار پایگاه داده را تشکیل می دهند آورده شده است:
- پایگاه داده: container که مجموعه ای از مجموعه ها را در خود جای داده است.
- مجموعه: مجموعه ای از اسناد. این شبیه به یک جدول در پایگاه داده SQL است. با این حال، بر خلاف پایگاه داده SQL، یک مجموعه ساختار مجموعه ای یا انواع داده های از پیش پیکربندی شده ندارد.
- اسناد: یک شیء شبیه به JSON. این شبیه به یک ردیف در پایگاه داده SQL است. یک شی JSON همچنین ممکن است شامل اشیاء فرزند، آرایه و غیره باشد.
- _شناسه: فیلد منحصر به فرد اجباری در هر سند. این یک سند را از سند دیگر جدا می کند، بنابراین می توانیم هر سند را به طور مستقل شناسایی کنیم. اگر این مقدار ارائه نشود، MongoDB به طور خودکار یک مقدار تصادفی برای فیلد اختصاص می دهد.
پیکربندی پروژه
بیایید با پروژه شروع کنیم و از آن بگذریم npm
درخواست می کند:
$ npm init -y
سپس، اجازه دهید درایور رسمی MongoDB را نصب کنیم:
$ npm install --save mongodb
برای اینکه واقعاً به پایگاه داده متصل شوید، باید مطمئن شوید که سرویس MongoDB شما در پسزمینه یا ماشین توسعه شما اجرا میشود. دستور را اجرا کنید mongo
روی خط فرمان شما برای ورود به پوسته Mongo:
اجرای دستور show dbs;
لیستی از پایگاه های داده فعلی را ارائه می دهد:
با اجرای دکمه می توانید از پوسته خارج شوید exit
فرمان
بر خلاف پایگاه داده های SQL، که نیاز به ایجاد پایگاه داده قبل از استفاده دارند – نیازی به ایجاد پایگاه داده یا مجموعه ای از قبل نیست. آنها به طور خودکار در صورت لزوم ایجاد می شوند.
اجرای عملیات CRUD
با مقداردهی اولیه پروژه و نصب MongoDB، میتوانیم به نوشتن منطق CRUD بپردازیم.
اتصال به پایگاه داده
البته برای استفاده از MongoDB در کد، نیاز داریم import ماژول:
const mongodb = require('mongodb');
سپس، بیایید یک مشتری را نمونه سازی کنیم:
const MongoClient = mongodb.MongoClient;
مشتری باید بداند که کجا باید وصل شود، بنابراین ما به آن یک a url
و dbName
:
// Connection URL
const url = 'mongodb://localhost:27017';
// Database Name
const dbName = 'userdb';
در نهایت، بیایید سعی کنیم به پایگاه داده متصل شویم:
// Use the connect method to create a connection w/ the database
MongoClient.connect(url, (err, client) => {
if (err) {
throw err;
return;
}
console.log('Database connection successful');
// This objects holds the refrence to the db
const db = client.db(dbName);
client.close();
});
اگر با موفقیت به پایگاه داده متصل شده اید، باید خروجی را ببینید:
Database connection successful
در غیر این صورت با یک پیغام خطا مواجه خواهید شد. بررسی کنید که آیا سرور راهاندازی است و نام کاربری و رمز عبور صحیح است یا خیر.
همانطور که در مثال می بینید، MongoClient.connect
متد دو پارامتر دارد، URL پایگاه داده و تابع callback.
تابع callback دو پارامتر دارد: err
و client
.
اگر مشکل شبکه یا هر مشکل دیگری در اتصال به پایگاه داده وجود داشته باشد، اولین پارامتر حاوی یک خطا خواهد بود. اگر مشکلی وجود نداشته باشد، خطا خواهد بود null
.
پارامتر دوم شی مشتری است که از آن برای تعامل با پایگاه داده استفاده می کنیم.
این db
دارایی از client
ارجاع به پایگاه داده دارد. برای انجام هر عملی روی آن پایگاه داده، ما از این مرجع استفاده می کنیم.
یک سند ایجاد کنید
برای انجام هر عملی روی بدیهی است که باید به پایگاه داده متصل باشید. با Mongo، دو راه برای درج اسناد در پایگاه داده وجود دارد. راه اول اضافه کردن است یک مجرد سند در یک زمان ما می توانیم استفاده کنیم insertOne()
روش رسیدن به این هدف:
const collection = db.collection('userdb');
// Insert one document
collection.insertOne({
firstName: 'john',
lastName: 'doe',
age: 21,
hobbies: (
'Reading books',
'Collecting stamps'
)
}, (err, result) => {
if (err) {
console.log(err);
return;
}
console.log(result.result);
});
پارامتر نتیجه پاسخ به تماس حاوی اطلاعات مربوط به پرس و جو است. یک فیلد به نام دارد result
که به نظر می رسد:
result: { n: 1, ok: 1 }
n
تعداد اسناد درج شده است. ok
او وضعیت فرمان است.
شما مجبور نیستید به صراحت یک پایگاه داده به نام ایجاد کنید userdb
، یا مجموعه ای به نام users
قبل از درج سند پایگاه داده و مجموعه به طور خودکار ایجاد می شوند.
روش دوم به شما امکان می دهد اضافه کنید چندگانه اسناد به یکباره ما می توانیم استفاده کنیم insertMany()
روش رسیدن به این هدف:
// Insert multiple documents
collection.insertMany((
{
firstName: 'john',
lastName: 'doe',
age: 21,
hobbies: (
'Reading books',
'Collecting stamps'
)
}, {
firstName: 'anna',
lastName: 'dias',
age: 20,
hobbies: ()
}
), (err, result) => {
if (err) {
console.log(err);
return;
}
console.log(result.ops);
});
با اجرای این قطعه کد به دست می آید:
( { _id: 1,
firstName: 'john',
lastName: 'doe',
age: 21,
hobbies: ( 'Reading books', 'Collecting stamps' ) },
{ _id: 2,
firstName: 'anna',
lastName: 'dias',
age: 20,
hobbies: () } )
از آنجایی که ما یک را تعریف نکرده ایم _id
برای هر یک از این اسناد، ما می توانیم تخصیص داده شده را واکشی کنیم _id
از result('ops')
در صورتی که ما نیاز به دسترسی به تولید شده داشته باشیم _id
.
علاوه بر آن، شما می توانید تعریف کنید _id
خودت:
// Insert one document
collection.insertOne({
_id: 'someuniqueid', // Our specified ID
firstName: 'john',
lastName: 'doe',
age: 21,
hobbies: (
'Reading books',
'Collecting stamps'
)
}, (err, result) => {
if (err) {
console.log(err);
return;
}
console.log(result.result);
});
بازیابی اسناد
بازیابی همه اسناد
ابتدا، بیایید روش واکشی همه اسناد از یک مجموعه را بررسی کنیم:
// Find all documents
collection.find({}).toArray((err, docs) => {
if (err) {
throw err;
}
console.log(docs)
});
اجرای این قطعه کد به ما نشان می دهد:
({ _id: 1,
firstName: 'john',
lastName: 'doe',
age: 21,
hobbies: ( 'Reading books', 'Collecting stamps' ) },
{ _id: 2,
firstName: 'anna',
lastName: 'dias',
age: 20,
hobbies: () } )
همانطور که در مثال مشاهده می کنید، ما یک شیء خالی ({}
) به عنوان پرس و جو.
با توجه به مستندات، toArray()
متد آرایهای را برمیگرداند که شامل تمام اسناد یک مکاننما است. این روش مکان نما را به طور کامل تکرار می کند، تمام اسناد را در RAM بارگیری می کند و مکان نما را خسته می کند.
اسناد واکشی شده توسط مجموعه به docs
پارامتر در تابع پاسخ به تماس
اسناد را با فیلتر پرس و جو پیدا کنید
روش بعدی برای یافتن سند استفاده از فیلتر پرس و جو است. به عنوان مثال، پرس و جو زیر کاربران با نام کوچک را انتخاب می کند john
:
{
'firstName': 'john'
}
و برای انجام این کار در کد:
collection.find({
firstName: 'john'
}).toArray((err, docs) => {
if (err) {
throw err;
}
console.log(docs)
});
این کد نتیجه خواهد داد:
({ _id: 1,
firstName: 'john',
lastName: 'doe',
age: 21,
hobbies: ( 'Reading books', 'Collecting stamps' ) } )
بدیهی است که همه سوابق با firstName
john
بازگردانده می شوند.
به روز رسانی یک سند
عملیات بعدی که قرار است در مورد آن صحبت کنیم به روز رسانی یک سند است. برای به روز رسانی یک سند، مشابه بازیابی یک سند، می توانیم از آن استفاده کنیم updateOne()
روش:
collection.updateOne(
// The query filter
{
firstName: 'john'
},
// The update values
{
$set: {
lastName: 'well',
edited: true
}
},
(err, result) => {
if (err) {
throw err;
}
console.log(result.result);
}
);
این کد نتیجه می دهد:
{ n: 1, nModified: 1, ok: 1 }
همانطور که در مثال می بینید، updateOne()
روش سه پارامتر را می پذیرد. اولین مورد فیلتر پرس و جو است. مورد دوم مقادیر به روز رسانی هستند. سومین تابع callback است که خطا و نتایج را به عنوان پارامتر می پذیرد.
دوباره، نتایج اینجا ما را از وضعیت (ok
، تعداد اسناد انتخاب شده برای به روز رسانی (n
) و تعداد اسناد به روز شده (nModified
).
n
می تواند بیشتر از nModified
، اگر یک فیلد با مقداری که قبلا داشته به روز شود.
با استفاده از این پرس و جو، یک سند را انتخاب کرده ایم که در آن فیلد است firstName
است john
و ما آن را تغییر داده ایم lastName
از آن سند به well
. همچنین یک فیلد به نام اضافه کرده ایم edited
و آن را به عنوان تنظیم کنید true
. توجه داشته باشید که چگونه ما در طول این کل نیازی به تعیین یا پیروی هیچ طرحی نداریم process. Mongo فقط هر داده ای را که شما ارسال می کنید می پذیرد.
اگر از updateOne()
روش، پرس و جو اولین سند را با فیلد منطبق انتخاب می کند. اگر چندین سند با یک فیلد با یک مقدار وجود دارد، با استفاده از updateMany()
متد همه آنها را به روز می کند، که در برخی موارد ممکن است آن چیزی نباشد که می خواهیم انجام دهیم.
توجه داشته باشید: اگر از updateOne()
روش، در حالت ایده آل پرس و جو باید تنها یک سند را انتخاب کند. در غیر این صورت، نمیتوانیم سندی را که ممکن است بهروزرسانی شود، پیشبینی کنیم. بنابراین این را در نظر داشته باشید و هنگام استفاده از فیلتر پرس و جو که می تواند با چندین سند مطابقت داشته باشد، محتاط باشید.
ما همچنین میتوانیم تمام اسنادی را ویرایش کنیم که شرایطی را که فیلد وجود دارد را برآورده کند firstName
است john
:
collection.updateMany(
// The query filter
{
firstName: 'john'
},
// The update values
{
$set: {
lastName: 'well',
edited: true
}
},
(err, result) => {
if (err) {
throw err;
}
console.log(result.result);
}
);
این updateMany()
روش مشابه است updateOne()
روش، به جز اینکه به روز می شود همه اسنادی که با فیلتر پرس و جو مطابقت دارند.
حذف یک سند
ما می توانیم استفاده کنیم deleteOne()
یا deleteMany()
روش های حذف یک سند از مجموعه:
collection.deleteOne(
// The query filter
{
firstName: 'john'
},
(err, result) => {
if (err) {
throw err;
}
console.log(result.result);
}
);
این کد نتیجه می دهد:
{ n: 1, ok: 1 }
مجدداً، به روشی مشابه با مثالهای قبلی – اولین پارامتر پذیرفته شده عبارت فیلتر و دومین پارامتر تابع callback است. تابع callback یک خطا یا یک نتیجه را برمی گرداند.
اجرای این قطعه کد، سندی را که با پرس و جو مطابقت دارد حذف می کند – در این مورد، سندی که در آن firstName
میدان است john
. باز هم، این فقط حذف خواهد شد اولین سندی که با پرس و جو مطابقت دارد.
شما همچنین می توانید استفاده کنید deleteMany
روش حذف تمام اسناد انتخاب شده:
collection.deleteMany(
// The query filter
{
firstName: 'john'
},
(err, result) => {
if (err) {
throw err;
}
console.log(result.result);
}
);
نتیجه
MongoDB یک پایگاه داده محبوب NoSQL و سبک وزن است که پیاده سازی و استفاده با Node واقعاً آسان است. ما یک برنامه Node بسیار ساده نوشتیم که با MongoDB برای ایجاد، بازیابی و حذف مجموعه ها تعامل دارد.
مثل همیشه کد منبع موجود است روی GitHub.
(برچسبها برای ترجمه)# جاوا اسکریپت
منتشر شده در 1403-01-22 03:44:03