предисловие
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)"
Процесс установки будет немного долгим, а вывод информации на терминал превышает один экран, здесь я перехватил только первую и последнюю части.
2. Затем получите кран MongoDB Homebrew.
brew tap mongodb/brew
3. Наконец, установите MongoDB CE (Community Edition)
brew install mongodb-community@4.2
Среда MongoDB теперь установлена на вашем Mac.
установить мангуста
Node.js может напрямую управлять MongoDB, но напрямую писать шаблоны проверки MongoDB, преобразования типов данных и бизнес-логики с помощью синтаксиса команд MongoDB обременительно. Итак, мы использовали мангуста.
mongooseЭто инструмент объектной модели MongoDB, который инкапсулирует общие методы MongoDB, благодаря чему node.js работает с MongoDB более элегантно и лаконично.
Только что в глобальном окружении установлены node.js и MongoDB, а под вашим проектом установлен mongoose:
cd your-project
npm i -S mongoose
Теперь ваша среда разработки настроена.
2. Начните службу MongoDB
Чтобы работать с MongoDB, сначала запустите ее. Есть два способа запустить службу MongoDB:
1. Бегать на переднем плане
mongod --config /usr/local/etc/mongod.conf
Преимущество работы на переднем плане заключается в том, что вы можете просматривать некоторые отзывы и журналы для упрощения отладки. Кроме того, если вы хотите закрыть службу, просто нажмите кнопкуcontrol + c
ключ.
2. Также может работать в фоновом режиме как служба macOS.
brew services start mongodb-community@4.2
Преимущество в том, что он запускается автоматически при включении и может быть использован в любое время.
Этот метод запуска, если вы хотите отключить службу, вы можете передатьstop
Заказ:
brew services stop mongodb-community@4.2
Теперь ваша база данных 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
Вы можете видеть, что распечатывается «открытие соединения 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Просто установите его.
Нажав в верхнем левом углу Robo3T для подключения к нашей базе данных, вы увидите, что MongoDB автоматически сгенерировала для нас базу данных и коллекцию и вставила запись:
Или вы можете напрямую вставлять данные напрямую через метод 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
можно увидетьname
дляlisi
Записи печатаются.
Если вы хотите запросить всю коллекцию:
// 不放查询条件即查询所有的记录
StudentModel.find({}).then(doc => {
console.log(doc);
})
Вы можете видеть, что все записи в коллекции напечатаны.
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, можно увидеть, что данные изменились, а переход в режим таблицы более интуитивен:
Однако в терминале подсказкаDeprecationWarning: collection.update is deprecated. Use updateOne, updateMany, or bulkWrite instead.
означает, что нам рекомендуется использовать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:
Глядя на вывод терминала, аналогичный обновлению, также предлагается использовать вместо этого новый метод.
означает, что нам рекомендуется использоватьremoveOne
,removeMany
илиbulkWrite
remove удаляет все результаты запроса.Метод устарел и был заменен на removeMany. removeOne Если в запросе найдено несколько результатов, удаляется только первая запись. removeMany удаляет все результаты из запроса. bulkWrite обеспечивает операции массовой записи с контролируемым порядком выполнения.
Кроме того, вывод терминала{ n: 1, ok: 1, deletedCount: 1 }
Смысл аналогичен обновлению, так что не буду утомлять.
Теперь мы успешно выполнили операции CRUD (добавить, прочитать, обновить, удалить) в базе данных MongoDB. ура~
Для более сложных операций вы можете перейти кДокументация API мангустаРегистрироваться.
4. Резюме
Подведем итоги, в основном поговорим об этих вещах:
-
node.js+MongoDB+mongoose
Сборка в среде под Mac, обратите внимание на использование последнихMongoDB
способ установки. - Как запускать и выключать на Mac
MongoDB
Служить. - представил
MongoDB
а такжеmongoose
основные базовые понятия. - Используйте mongoose для подключения и операций CRUD MongoDB. можно использовать
Robo3T
для более интуитивного наблюдения за базой данных.
Внешний интерфейс также может играть с разработкой базы данных. Добро пожаловать на общение~
Адрес источника статьи:GitHub.com/so 111/монго…
Связанные веб-сайты:
Официальный сайт домашнего пивоварения
Официальный сайт MongoDB
официальный сайт мангуста
Официальный сайт Робо3Т
Менеджер пакетов macOS Homebrew удаляет MongoDB
--
Добро пожаловать в перепечатку, пожалуйста, укажите источник:
Найдите Pinyin.com/2019/10/10/…