Развитие боя с мангустами — основы

задняя часть база данных JavaScript MongoDB Mongoose
Развитие боя с мангустами — основы
Что такое MongoDB?MongoDB — это база данных документов с открытым исходным кодом, обеспечивающая высокую производительность, высокую доступность и автоматическое масштабирование.
Что такое Мангуст?Проще говоря, 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, и есть еще содержимое, которое нам нужно изучить и изучить глубже. 


Если у вас есть какие-либо вопросы или комментарии, пожалуйста, оставьте сообщение в области комментариев ниже!