Что такое Мангуст?Проще говоря, Mongoose — это инкапсуляция операций базы данных MongoDB в среде узла, инструмент объектной модели, который преобразует данные в базе данных в объекты JavaScript для использования в приложениях.
Официальный сайт:mongoosejs.com/Установите MongoDB под окном:ооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооо.Установите MongoDB под Linux: http://www.runoob.com/mongodb/mongodb-linux-install.html
1. Схема, модель, объект
Прежде чем использовать Mongoose, сначала разберитесь с тремя концепциями Mongoose:
Schema
,Model
, Организация(1) Schema
Схема представляет собой скелет модели базы данных, хранящийся в виде файла, и не имеет возможности управлять базой данных. Фактически, это также можно рассматривать как определение структуры таблицы.
как создать
Schema
?const Articles = new Schema({
articleId: {type: String},
title: { type: String },
content: { type: String },
by: { type: String},
modifyOn: { type: Date, default: Date.now },
}, { collection: 'articles' });
(2) Model
Модель, созданная публикацией схемы, объект манипуляции с базой данных с абстрактными свойствами и поведением. Именно наличие Модели позволяет нам более удобно и быстро работать с базой данных.
полагаться
Schema
генерироватьModel
:mongoose.model('articles', Articles);
(3) Entity
Сущность, созданная Моделью, операции которой также влияют на базу данных.
полагаться
Model
, созданиеEntity
:const article = new ArticlesModel(req.body); // 相当于调用了Model.create(req.body)
2. Система управления статьями
Разобравшись со схемой, моделью и сущностью, давайте приступим к созданию простой системы управления статьями.
Стек технологий:Mongoose: инструмент объектной моделиExpress: основан на платформе Node.js, быстрой, открытой и минималистичной среде веб-разработки.Pug: Механизм шаблонов на основе Node.jsLodash: библиотека инструментов JavaScript с последовательным интерфейсом, модульностью, высокой производительностью и т. д.
Полный проект: Github:mongodb-pratice
Стартовый проект:
cd mongoose-demo
npm install
npm start
Описание структуры проекта:
- db: операционные файлы, связанные с базой данных, такие как подключение connect.js
- модули: модели, такие как статьи, которые содержат маршруты, методы, модели и т. д.
- просмотры: файл шаблона
- общедоступные: статические ресурсы
- main.js: файл запуска
3. Детали проекта
(1) Подключиться к базе данных
Mongoose подключается к базе данных просто:
// db/connect.js
const mongoose = require('mongoose');
exports.start = (success) => {
mongoose.connect('mongodb://localhost/blog', { useMongoClient: true });
const db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', () => {
// we're connected!
console.log('connected db: blog');
if (success) {
success();
}
});
};
Приведенный выше код означает подключение к локальной базе данных.blog
и привяжите прослушиватель событий, чтобы отслеживать успешность подключения к базе данных.Затем в файле запуска вызовите:
// main.js
const db = require('./db/connect');
db.start();
Конечно, вы также можете поместить оба кода в один и тот же файл.Если вам нужен пользователь и пароль, вы можете сделать это:
mongoose.connect('mongodb://root:password@localhost/blog')
Когда соединение с базой данных установлено успешно, мы можем работать с базой данных.(2) Создать модель
Здесь мы строим модель на основе простой системы статей:
// modules/articles/articles.model.js
const mongoose = require('mongoose'),
Schema = mongoose.Schema;
//先创建Schema
const Articles = new Schema({
articleId: {type: String},
title: { type: String },
content: { type: String },
by: { type: String},
modifyOn: { type: Date, default: Date.now },
}, { collection: 'articles' });
//通过Schema创建Model
mongoose.model('articles', Articles);
Первый параметр — это объект структуры, каждый ключ — это поле, вы можете определить тип/значение по умолчанию/проверку/индекс и т. д.; второй параметр является необязательным (по умолчанию берется первый параметр модели плюс s) , Имя, используемое для настройки коллекции.Конечно, вы также можете определить такие имена:
mongoose.model('articles', Articles, 'articles');
Примечание. Нам не нужно создавать Коллекцию вручную, она будет создана автоматически при работе, если Коллекции не существует.
(3) Настройка интерфейса API
В приведенном выше коде мы подключились к базе данных и создали операционную модель. Далее нам нужно настроить интерфейс API для вызова. Здесь нам нужно использовать Express:
// modules/articles/articles/route.js
const articleControllder = require('./articles.controller');
module.exports = (app) => {
app.route('/api/article/add')
.post(articleControllder.add);
app.route('/api/article/find')
.get(articleControllder.get);
app.route('/api/article/remove')
.delete(articleControllder.remove);
app.route('/api/article/update')
.put(articleControllder.update);
};
Приведенный выше код предоставляет четыре API для добавления, удаления, изменения и проверки.(4) Основные операции (CRUD)
Метод, вызываемый в указанном выше маршруте:
// modules/articles/articles.controller.js
const mongoose = require('mongoose');
const ArticlesModel = mongoose.model('articles');
mongoose.Promise = global.Promise;
const commonFunction = require('../common/common_function');
const _ = require('lodash');
exports.get = (req, res) => {
const articleId = req.query['id'];
ArticlesModel.findById(articleId, (err, result) => {
if (err) {
return res.status(400).send({
message: '查找失败',
data: []
});
} else {
res.jsonp({
data: [result]
});
}
});
};
exports.add = (req, res) => {
req.body['articleId'] = commonFunction.getRandom();
req.body['modifyOn'] = new Date();
req.body['by'] = 'TG';
const article = new ArticlesModel(req.body);
article.save((err) => {
if (err) {
return res.status(400).send({
message: '新增失败',
data: []
});
} else {
res.jsonp({
data: [article]
});
}
});
};
exports.remove = (req, res) => {
const id = req.query['id'];
ArticlesModel.remove({'_id': id}, (err) => {
if (err) {
return res.status(400).send({
message: '删除失败',
data: []
});
} else {
res.jsonp({status: 1});
}
})
};
exports.update = (req, res) => {
const id = req.body['id'];
ArticlesModel.findById(id, (err, result) => {
if (err) {
return res.status(400).send({
message: '更新失败',
data: []
});
} else {
delete req.body['id'];
const articles = _.extend(result, req.body);
articles.save((err, result) => {
if (err) {
return res.status(400).send({
message: '更新失败',
data: []
});
} else {
res.jsonp({ data: [articles] });
}
})
}
})
};
Это самая основная операция CRUD.
Вы можете удивиться, почему я не экспортировал Модель, почему ее можно использовать здесь, ведь я по умолчанию загрузил все опубликованные Модели в загрузочный файл.
// main.js
...
const loadModels = () => {
files.forEach((v, k) => {
if (/model.js$/.test(v)) {
require(path.resolve(v));
}
});
};
loadModels();
...
Получив все файлы в папке модулей и сопоставив файл модели с суффиксом model.js, вы можете получить модель где угодно:
const ArticlesModel = mongoose.model('articles');
Вы также можете узнать об общих операторах MongoDB из этой статьи: 《Общие утверждения MongoDB》
Вот только краткое введение в самые основные соединения и CRUD Mongoose, и есть еще содержимое, которое нам нужно изучить и изучить глубже.
Если у вас есть какие-либо вопросы или комментарии, пожалуйста, оставьте сообщение в области комментариев ниже!