Операционная база данных Node.js MongoDB + статьи о мангусте

Node.js
Операционная база данных Node.js MongoDB + статьи о мангусте

предисловие

node.jsПоявление javascript позволяет разрабатывать серверные службы с синтаксисом внешнего интерфейса (javascript), и поэтому все больше и больше внешних интерфейсов подвергаются воздействию серверных частей и даже обращаются к разработке с полным стеком. Бэкенд-разработка незаменима для операций с базами данных.MongoDBЭто система баз данных с открытым исходным кодом, основанная на распределенном хранилище файлов. В этой статье подробно описано, как использоватьnode.js + mongooseиграть вокругMongoDB. Надеюсь помочь нуждающимся.

Поскольку я разрабатываю с Mac, все следующие операции выполняются под Mac.

Сначала настройте среду

Установите Node.js

Если у вас есть среда узла, вы можете пропустить ее.

официальный сайт nodejsПредоставляется установочный пакет macOS, который можно загрузить и установить напрямую. Теперь вышла стабильная версия nodejs12.11.1.

Установить MongoDB

MongoDB— это универсальная распределенная база данных на основе документов, созданная для современных разработчиков приложений и эпохи облачных вычислений.

В прошлом месяце (сентябрь) менеджер пакетов macOS Homebrew объявил об удалении MongoDB. Причина в том, что в октябре прошлого года MongoDB объявила об изменении своей лицензии с открытым исходным кодом сGNU AGPLv3переключиться наSSPL(Server Side Public License), в ответ на то, что AWS и другие поставщики облачных услуг предоставляют MongoDB как услугу пользователям, не отдавая должное сообществу. MongoDB надеется получить доход от программного обеспечения как услуги. Homebrew считает, что MongoDB больше не является открытым исходным кодом...

Ближе к дому, по вышеуказанным причинам, мы не можем напрямую использоватьbrew install mongodbПришло время установить MongoDB. К счастью, MongoDB поддерживает индивидуальнуюHomebrew tap. И вInstall MongoDB Community Edition Обновлены шаги установки.

Последние шаги установки MongoDB под Mac следующие:

1. Первая установкаHomebrew

Homebrew — менеджер пакетов для macOS. Поскольку OSX по умолчанию не включает пакет Homebrew brew, его необходимо установить первым, а уже установленный можно пропустить.

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Процесс установки будет немного долгим, а вывод информации на терминал превышает один экран, здесь я перехватил только первую и последнюю части.

mg-install-homebrew.jpg

mg-install-homebrew-2.jpg

2. Затем получите кран MongoDB Homebrew.

brew tap mongodb/brew

mg-tap-mongodb-brew.jpg

3. Наконец, установите MongoDB CE (Community Edition)

brew install mongodb-community@4.2

mg-brew-install-mongodb.jpg

Среда MongoDB теперь установлена ​​на вашем Mac.

установить мангуста

Node.js может напрямую управлять MongoDB, но напрямую писать шаблоны проверки MongoDB, преобразования типов данных и бизнес-логики с помощью синтаксиса команд MongoDB обременительно. Итак, мы использовали мангуста.

mongooseЭто инструмент объектной модели MongoDB, который инкапсулирует общие методы MongoDB, благодаря чему node.js работает с MongoDB более элегантно и лаконично.

Только что в глобальном окружении установлены node.js и MongoDB, а под вашим проектом установлен mongoose:

cd your-project
npm i -S mongoose

mg-install-mongoose.jpg

Теперь ваша среда разработки настроена.

2. Начните службу MongoDB

Чтобы работать с MongoDB, сначала запустите ее. Есть два способа запустить службу MongoDB:

1. Бегать на переднем плане

mongod --config /usr/local/etc/mongod.conf

Преимущество работы на переднем плане заключается в том, что вы можете просматривать некоторые отзывы и журналы для упрощения отладки. Кроме того, если вы хотите закрыть службу, просто нажмите кнопкуcontrol + cключ.

mg-run-mongodb-in-foreground.jpg

2. Также может работать в фоновом режиме как служба macOS.

brew services start mongodb-community@4.2

Преимущество в том, что он запускается автоматически при включении и может быть использован в любое время.

mg-run-mongodb-as-a-server.jpg
Этот метод запуска, если вы хотите отключить службу, вы можете передатьstopЗаказ:

brew services stop mongodb-community@4.2

mg-stop-mongodb-service.jpg

Теперь ваша база данных MongoDB запущена.

3. Работа с MongoDB

Перед операцией объясните некоторые основные концепции MongoDB и mongoose.

MongoDB

  • Записи данных в MongoDB представляют собойBSONформат (BSON — это формат файла JSON, описанный в двоичном формате).
  • MongoDB будет文件сохранить в集合в, будет集合сохранить в数据库середина.
  • Базы данных и коллекции MongoDB не нужно создавать вручную.
  • 集合collection: Эквивалент реляционной базы данных表table.
  • 文件document: единица записи данных MongoDB, эквивалентная реляционной базе данных.记录row.

mongoose

  • schema: В мангусте все исходит изschema, каждыйschemaСопоставляет MongoDB集合, что определяет это集合середина文档скелет.
  • model: Один文件конструктор, скомпилированныйschemaполучитьmodelЭкземпляр представляет собой文件,modelОтвечает за создание и чтение из баз данных MongoDB.文档.

Больше концепций мангуста можно найти наmongoose guideРегистрироваться.

Операции с базой данных:

1. Используйте mongoose для подключения к MongoDB

Создать в проектеconnection.jsдокумент

// connection.js file
const mongoose = require('mongoose');
const conn = mongoose.createConnection(

  // 连接地址,MongoDB 的服务端口为27017
  // dbtest是我要使用的数据库名,当往其中写数据时,MongoDB 会自动创建一个名为dbtest的数据库,不用事先手动创建。
  'mongodb://127.0.0.1:27017/dbtest', 

  // 一些兼容配置,必须加,你不写运行的时候会提示你加。
  {
    useNewUrlParser: true,
    useUnifiedTopology: true
   }
)
conn.on('open', () => {
	console.log('打开 mongodb 连接');
})
conn.on('err', (err) => {
	console.log('err:' + err);
})

бегать:

node conection.js

mg-connection.jpg

Вы можете видеть, что распечатывается «открытие соединения mongodb», и операция ожидает.

Это означает, что вы успешно подключились к MongoDB и можете приступать к работе с базой данных.

Для удобства расширения сначалаconnection.jsИзмените его, чтобы экспортировать как модуль, чтобы его можно было импортировать и повторно использовать в другом месте.

// connection.js file
const mongoose = require('mongoose');
const conn = mongoose.createConnection(
  'mongodb://127.0.0.1:27017/dbtest',
  {
    useNewUrlParser: true,
    useUnifiedTopology: true
   }
)
conn.on('open', () => {
	console.log('打开 mongodb 连接');
})
conn.on('err', (err) => {
	console.log('err:' + err);
})

module.exports = conn; //commonJs 语法,导出conn模块。

2. Добавьте действие

save | createметод

новыйinsert.jsдокумент

// insert.js file
let mongoose = require('mongoose');

// 导入连接模块
let connection = require('./connection');

// 创建schema
let StudentSchema = new mongoose.Schema({
   name: String,
   age: Number
})

// 通过connection和schema创建model
let StudentModel = connection.model('Student', StudentSchema);


// 通过实例化model创建文档
let studentDoc = new StudentModel({
    name: 'zhangsan',
    age: 20
})

// 将文档插入到数据库,save方法返回一个Promise对象。
studentDoc.save().then((doc) => {
    console.log(doc)
})

бегать:

node insert.js

Для того, чтобы увидеть результаты работы с базой данных более интуитивно, рекомендуется установить средство визуализации базы данных:Robo3T,скачатьверсия для MacПросто установите его.

mg-robo3T-download2.jpg

Нажав в верхнем левом углу Robo3T для подключения к нашей базе данных, вы увидите, что MongoDB автоматически сгенерировала для нас базу данных и коллекцию и вставила запись:

mg-insert.jpg

Или вы можете напрямую вставлять данные напрямую через метод create Модели, который возвращает Promise:

StudentModel.create({
    name: 'lisi',
    age: 19
}).then((doc) => {
    console.log(doc)
})

3. Операция чтения

findметод

Чтобы повторно использовать код более разумно, мы сначала извлекаем StudentSchema и StudentModel:

новыйStudentSchema.jsдокумент

// StudentSchema.js file
const mongoose = require('mongoose');

let StudentSchema = mongoose.Schema({
    name: String,
    age: Number
})

module.exports = StudentSchema;

новыйStudentModel.jsдокумент

// StudentModel.js file
const connection = require('./connection');
const StudentSchema = require('./StudentSchema');

let StudentModel = connection.model('Student', StudentSchema);

module.exports = StudentModel;

затем создайте новыйquery.jsдокумент

// query.js file
const StudentModel = require('./StudentModel');

// 富查询条件,对象格式,键值对,下面为查询 name 为 lisi 的记录
StudentModel.find({name: 'lisi'}).then(doc => {
    console.log(doc);
})

бегать

node query.js

mg-guery.jpg

можно увидетьnameдляlisiЗаписи печатаются.

Если вы хотите запросить всю коллекцию:

// 不放查询条件即查询所有的记录
StudentModel.find({}).then(doc => {
    console.log(doc);
})

mg-guery-all.jpg

Вы можете видеть, что все записи в коллекции напечатаны.

4. Операция обновления

update|updateOne|updateManyметод

новыйupdate.jsдокумент

// update.js file
const StudentModel = require('./StudentModel');

// update 方法接收2个参数,第一个是查询条件,第二个是修改的值
// 下面把name为lisi的记录,将他的age修改为80
StudentModel.update({name: 'lisi'}, {age: 80}).then(result => {
    console.log(result)
})

Зайдя в Robo3T, можно увидеть, что данные изменились, а переход в режим таблицы более интуитивен:

mg-update2.jpg

Однако в терминале подсказкаDeprecationWarning: collection.update is deprecated. Use updateOne, updateMany, or bulkWrite instead.

mg-update.jpg

означает, что нам рекомендуется использоватьupdateOne,updateManyилиbulkWrite

update Обновить все результаты запроса.Метод устарел и заменен на updateMany. updateOne Если в запросе найдено несколько результатов, обновляется только первая запись. upateMany обновляет все результаты запроса. bulkWrite обеспечивает операции массовой записи с контролируемым порядком выполнения.

Для надежности кода мы должны заменить метод update на метод updateMany, как было предложено.

Кроме того, вывод терминала{ n: 1, nModified: 1, ok: 1 }означает:

  • "n: 1": найдена 1 запись.
  • «nModified: 1»: необходимо изменить 1 запись. (Если измененное значение совпадает с исходным значением, то все, что нужно изменить, равно 0)
  • "ok: 1": 1 элемент был успешно изменен.

5. Удалить операцию

remove|removeOne|removeMany|bulkWriteметод

новыйremote.jsдокумент

// remove.js file
const StudentModel = require('./StudentModel');

// delete 方法接收1个参数,就是查询条件
// 下面把name为lisi的记录删除
StudentModel.remove({name:'lisi'}).then((result) => {
    console.log(result);
});

Войдите в Robo3T, вы увидите, что в коллекции нет записи с именем lisi:

mg-remove2.jpg

Глядя на вывод терминала, аналогичный обновлению, также предлагается использовать вместо этого новый метод.

mg-remove.jpg

означает, что нам рекомендуется использоватьremoveOne,removeManyилиbulkWrite

remove удаляет все результаты запроса.Метод устарел и был заменен на removeMany. removeOne Если в запросе найдено несколько результатов, удаляется только первая запись. removeMany удаляет все результаты из запроса. bulkWrite обеспечивает операции массовой записи с контролируемым порядком выполнения.

Кроме того, вывод терминала{ n: 1, ok: 1, deletedCount: 1 }Смысл аналогичен обновлению, так что не буду утомлять.

Теперь мы успешно выполнили операции CRUD (добавить, прочитать, обновить, удалить) в базе данных MongoDB. ура~

Для более сложных операций вы можете перейти кДокументация API мангустаРегистрироваться.

4. Резюме

Подведем итоги, в основном поговорим об этих вещах:

  1. node.js+MongoDB+mongooseСборка в среде под Mac, обратите внимание на использование последнихMongoDBспособ установки.
  2. Как запускать и выключать на MacMongoDBСлужить.
  3. представилMongoDBа такжеmongooseосновные базовые понятия.
  4. Используйте mongoose для подключения и операций CRUD MongoDB. можно использоватьRobo3Tдля более интуитивного наблюдения за базой данных.

Внешний интерфейс также может играть с разработкой базы данных. Добро пожаловать на общение~

Адрес источника статьи:GitHub.com/so 111/монго…

Связанные веб-сайты:
Официальный сайт домашнего пивоварения
Официальный сайт MongoDB
официальный сайт мангуста
Официальный сайт Робо3Т
Менеджер пакетов macOS Homebrew удаляет MongoDB

--
Добро пожаловать в перепечатку, пожалуйста, укажите источник:
Найдите Pinyin.com/2019/10/10/…