1. هراء
منذ أن تلامس مع MongoDB في يناير 2013 ، قمت بتطوير خدمات علامات السفر ونظام استرجاع علامة Weibo وخدمات MAP وخدمات تطبيق الويب ... تم نقل السيناريوهات التي تستخدم MongoDB من بيئة .NET و Java إلى منصة Node.js. أشعر أكثر فأكثر أن Node.js و MongoDB يتم دمجهما مع بعضهما البعض جيدًا. يبدو الأمر وكأن mongodb و node.js يولدون مع زوج. في الواقع ، عميل MongoDB هو محرك تحليل JS. لذلك ، فإن اختيار MongoDB و Node.js كنماذج أولية للمنتج هو أيضًا اختيار لطيف للغاية. على الإنترنت ، واجهت مستخدمي الإنترنت يسألون عن تطوير MongoDB ، وهو السائق هو الخيار الأفضل. اعتدت على استخدام برامج التشغيل الأصلية ، ولكن هناك العديد من الأشياء التي يجب الانتباه إليها عند كتابة التعليمات البرمجية ، مثل عملية إغلاق الاتصال ، وما إلى ذلك ، في بيئة تطوير Node.js ، أوصي باستخدام Mongoskin هنا.
2. العديد من المفاهيم التي يجب مناقشتها
(1) قاعدة البيانات: نفس قاعدة البيانات العلائقية.
(2) المجموعة: الجداول في قاعدة البيانات العلائقية.
(3) المستند: سجل مشابه لقاعدة البيانات العلائقية هو في الواقع كائن JSON.
(4) تصميم قاعدة البيانات: يوصى بالنظر في تصميم NOSQL والتخلي عن فكرة تصميم البيانات العلائقية ؛ في الواقع ، تصميم قاعدة بيانات NOSQL عميق ويجب ممارسته بشكل مستمر في المشروع.
(5) نظام المستخدم: كل قاعدة بيانات لها مسؤول خاص بها ، والتي يمكن:
نسخة الكود كما يلي:
استخدم dbname ؛ db.adduser ('root_1' ، 'test') ؛
(7) يوصى بتغيير المنفذ الخارجي
(8) ابدأ الخدمة (تم تعديلها قليلاً تحت Win و Linux):
نسخة الكود كما يلي:
Mongod -DBPath "xx/mongodb/data/db" - -logpath "xx/mongodb/log/mongo.log" -logappend -auth -PORT 7868
3. بناء البنية التحتية لتطوير MongoDB
(0) NPM تثبيت mongoskin تثبيت mongoskin
لم يتم تقديم Node.js التثبيت والحزمة والآليات الأخرى هنا.
(1) إنشاء ملف التكوين config.json
نسخة الكود كما يلي:
{
"dbname": "اختبار" ،
"الميناء": "7868" ،
"مضيف": "127.0.0.1" ،
"اسم المستخدم": "اختبار" ،
"كلمة المرور": "اختبار"
}
(2) إنشاء فئة mongo.js ذات الصلة
نسخة الكود كما يلي:
var mongoskin = مطلوب ('mongoskin') ،
config = require ('./../ config.json') ؛
/*
* des: تصدير وحدة اتصال قاعدة البيانات
* */
module.exports = (function () {
var host = config.host ،
المنفذ = config.port ،
dbname = config.dbname ،
اسم المستخدم = config.username ،
كلمة المرور = config.password ،
str = 'mongoDB: //' + username + ':' + password + '@' + host + ':' + port + '/' + dbname ؛
خيار var = {
native_parser: صحيح
} ؛
إرجاع mongoskin.db (str ، خيار) ؛
}) () ؛
(3) بناء الفئة الأساسية من CRUD: من أجل تقليل رمز الخثارة المكررة ، تحتاج فقط إلى تمرير كائن JSON ذي الصلة.
نسخة الكود كما يلي:
var db = require ('./ mongo.js') ،
الحالة = مطلوب ('./ الحالة ") ،
mongoskin = مطلوب ('mongoskin') ؛
var crud = function (collection) {
this.collection = collection ؛
db.bind (this.collection) ؛
} ؛
crud.prototype = {
/*
* des: إنشاء سجل
* model: سجل إدراج ، نموذج بتنسيق JSON
* callback: رد الاتصال ، إرجاع سجل معلومات الإدراج أو الفشل الناجح
*
* */
إنشاء: وظيفة (نموذج ، رد الاتصال) {
db [this.collection] .save (نموذج ، وظيفة (err ، العنصر) {
إذا (خطأ) {
رد رد الاتصال (status.fail) ؛
}
item.Status = status.success.status ؛
item.Message = status.success.message ؛
رد رد الاتصال (البند) ؛
}) ؛
} ،
/*
* des: اقرأ سجل
* Query: ظروف الاستعلام ، json حرفي من Mongo Query
* callback: رد الاتصال ، سجلات الإرجاع التي تلبي المتطلبات أو معلومات الفشل
*
* */
اقرأ: وظيفة (استعلام ، رد فعل) {
db [this.collection] .find (Query) .ToRray (وظيفة (err ، العناصر) {
إذا (خطأ) {
رد رد الاتصال (status.fail) ؛
}
var obj = {
الحالة: status.success.status ،
الرسالة: status.success.message ،
العناصر: العناصر
} ؛
رد رد الاتصال (OBJ) ؛
}) ؛
} ،
/*
* des: تحديث سجل
* Query: ظروف الاستعلام ، json حرفي من Mongo Query ، هنا _id
* updatemodel: نموذج بتنسيق JSON الذي يجب تحديثه
* callback: إرجاع معلومات النجاح أو الفشل
*
* */
تحديث: الدالة (الاستعلام ، updateModel ، رد الاتصال) {
var set = {set: updateModel} ؛
db [this.collection] .update (Query ، set ، function (err) {
إذا (خطأ) {
رد رد الاتصال (status.fail) ؛
}آخر{
رد رد الاتصال (status.sccess) ؛
}
}) ؛
} ،
/*
* des: حذف سجل
* Query: ظروف الاستعلام ، json حرفي من Mongo Query
* callback: إرجاع رسالة الفشل أو النجاح
*
* */
Deletedata: Function (Query ، Callback) {
db [this.collection] .remove (query ، function (err) {
إذا (خطأ) {
رد رد الاتصال (status.fail) ؛
}
رد رد الاتصال (status.sccess) ؛
}) ؛
}
} ؛
module.exports = crud ؛
(4) بناء status.json ، لأن بعض الحالات مطلوبة للإشارة إلى النجاح والفشل ، يمكن توسيعها إلى أخطاء رمز التحقق ، وأخطاء التحقق من الرسائل القصيرة ، وأخطاء اسم المستخدم ، وما إلى ذلك في المرحلة اللاحقة.
نسخة الكود كما يلي:
module.exports = {
/*
* حالة النجاح
*
* */
نجاح: {
الحالة: 1 ،
الرسالة: "موافق"
} ،
/*
* حالة فاشلة
*
* */
يفشل: {
الحالة: 0 ،
الرسالة: "فشل"
} ،
/*
* كلمة المرور التي تم إدخالها مرتين غير متسقة
* */
REPERPASSWORD: {
الحالة: 0 ،
الرسالة: "كلمات المرور التي تم إدخالها مرتين غير متسقة"
}
} ؛