Управляемое чтение
nuggets.capable/post/684490…яйцо-от входа до запуска (Часть 1)
nuggets.capable/post/684490…яйцо-от входа в онлайн (Часть 2)
1 Установка и настройка
1.0 Введение
MongoDB написана на языке C++ и представляет собой систему баз данных с открытым исходным кодом, основанную на распределенном хранилище файлов.
В случае высокой нагрузки добавление дополнительных узлов может гарантировать производительность сервера.
MongoDB стремится предоставить масштабируемое, высокопроизводительное решение для хранения данных для веб-приложений.
MongoDB хранит данные в виде документа, а структура данных состоит из пар ключ-значение (ключ=>значение). Документы MongoDB аналогичны объектам JSON. Значения полей могут содержать другие документы, массивы и массивы документов
1.1 Руководство по установке компьютера Mac
1.1.1 Установка хоумбрю
homebrewПроверьте официальный сайт для установки.После завершения установки введите следующую команду в терминале для обновленияhomebrewизpackageбаза данных
brew update
намекать:
brew update
Обновитьbrewрепозиторий,brew outdated
Проверятьoutdatedбиблиотеки и приложения,brew upgrade
Обновитьoutdatedбиблиотеки и приложения,brew cleanup
Очистка устаревших библиотек и приложений
1.1.2 Установите монгоддб
использоватьhomebrewУстановитьmongodb, введите в терминале MAC
cd /
brew install mongodb
Для просмотра информации об установке
brew info mongodb
Проверятьmongodbверсия
mongo --version
which mongod
/usr/local/bin/mongod
Если да, то установка прошла успешно
запустить службу
sudo mongod
1.2 Вручную развернуть сервер
1.2.1 Загрузите установочный пакет
wget http://fastdl.mongodb.org/linux/mongodb-linux-i686-1.8.2.tgz
После завершения загрузки разархивируйте сжатый пакет
tar zxf mongodb-linux-i686-1.8.2.tgz
1.2.2 Подготовка к установке
Переместите mongodb в папку /usr/local/server/mongdb.
mv mongodb-linux-i686-1.8.2 /usr/local/mongodb
Создание папок базы данных и файлов журналов
mkdir /usr/local/mongodb/data
touch /usr/local/mongodb/logs
1.2.3 Установить автозапуск загрузки
Добавьте элемент запуска mongodb в rc.local, чтобы убедиться, что mongodb запускается при включении сервера.
echo "/usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data –logpath=/usr/local/mongodb/logs –logappend --auth -–port=27017" >> /etc/rc.local
1.2.4. Запустите mongodb
cd в папку bin в каталоге mongodb, чтобы запустить mongodb
Ниже приведен метод входа в систему, для которого требуются разрешения. Для подключения пользователя требуется имя пользователя и пароль.
/usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/logs --logappend --auth --port=27017 --fork
Для этого не требуется пароль (не рекомендуется)
/usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/logs --logappend --port=27017 --fork
1.3 Завершение пагоды в один клик
1.4 Установить пароль
1.4.1 Введите каталог bin пути установки
cd /www/server/mongodb/bin
1.4.2 Введите командную строку mongo, чтобы войти в среду mongodb
mongo
1.4.3 Переключиться на базу данных администратора
use admin
1.4.4 Установить пароль пользователя для администратора
- пользователь: имя пользователя
- pwd: пароль пользователя
- роли: используются для установки разрешений пользователей, таких как чтение, чтение и запись и т. д.
db.createUser({user: 'root', pwd: 'admin_mima', roles: ['root']})
1.4.5 Проверить успешность добавления, db.auth (имя пользователя, пароль пользователя)
db.auth('root', 'admin_mima')
Если возвращается «1», проверка прошла успешно, а если «0», проверка завершается неудачно.
1.4.6 Создайте новую базу данных, например Giant
use asGiant
1.4.7 Затем добавьте пользователя в библиотеку asGiant и предоставьте разрешения,
db.createUser({ user: 'aaaa', pwd: 'graphql_mima', roles: [{ role: 'readWrite', db: 'asGiant' }] })
Эта строка кода означает создание пользователя cccc и предоставление разрешений на чтение и запись.db представляет имя базы данных, с которой работает пользователь.
- Чтение: позволяет пользователю читать указанную базу данных.
- readWrite: позволяет пользователям читать и записывать в указанную базу данных
- dbAdmin: позволяет пользователям выполнять административные функции в указанной базе данных, такие как создание индекса, удаление, просмотр статистики или доступ к system.profile.
- userAdmin: позволяет пользователям записывать в коллекцию system.users, а также может создавать, удалять и управлять пользователями в указанной базе данных.
- clusterAdmin: доступен только в базе данных администратора, предоставляет пользователю административные привилегии для всех функций, связанных с набором сегментов и реплик.
- readAnyDatabase: доступно только в базе данных администратора, что дает пользователю разрешение на чтение для всех баз данных.
- readWriteAnyDatabase: доступно только в базе данных администратора, предоставляя пользователю права на чтение и запись для всех баз данных.
- userAdminAnyDatabase: доступен только в базе данных администратора, что дает пользователю права userAdmin для всех баз данных.
- dbAdminAnyDatabase: доступен только в базе данных администратора, предоставляя пользователю привилегии dbAdmin для всех баз данных.
- root: доступен только в базе данных администратора. супер аккаунт, супер полномочия
1.4.8 Включить безопасный вход
Все готово, перезапустите mongodb, добавив
--auth
Включить безопасный вход
mongod --dbpath /www/server/mongodb/data --auth
Если вы устанавливаете вручную, то необходимы следующие операции
mongodb, MongoDB не имеет контроля доступа по умолчанию, мы передаем--auth
параметр для перезапуска службы mongod.
mongod --dbpath путь к папке базы данных хранилища --auth
mongod --dbpath usr/local/mongodb/bin --auth
После включения пользователи, подключающиеся к mongod, должны указать имя пользователя и пароль.
Если вы используете пагоду для завершения одного клика
может быть изменен с помощьюmongodb
конфигурационный файл для реализации
превратиться в
net:
port: 27017
bindIp: 0.0.0.0
#operationProfiling:
#replication:
# replSetName: bt_main
security:
authorization: enabled
javascriptEnabled: false
- Измените bindIp на 0.0.0.0, чтобы разрешить доступ к внешней сети.
- авторизация изменена на включенную, чтобы включить аутентификацию
перезапустить монгодб
1.5 Порт выпуска
2 Соединение инструмента
2.1 Скачать робо 3т
создать соединение
нажмите тест
Установка завершена
2.2 Подключение к зашифрованной базе данных
xxx.db('mongodb://your name: your pwd@ip:27017/asgiant');
your name
: имя пользователяyour pwd
: это пароль
3 Резервное копирование и восстановление данных
Когда в базе данных mongodb включена проверка подлинности, дамп нельзя использовать напрямую, и необходимо указать соответствующий пароль учетной записи, как показано ниже.
mongodump -h 127.0.0.1:27017 -d asGiant -u 'myz' -p '123456' -o /usr/local/mongodb/dump
-h адрес
-d имя базы данных
-у имя пользователя
-p пароль
-o выходной адрес
--authenticationDatabase admin Аутентифицировать базу данных учетной записи
Синтаксис командного сценария mongorestore следующий:
mongorestore -h <hostname><:port> -d dbname <path>
- **--host <:port>, -h <:port>: **Адрес сервера, на котором находится MongoDB, по умолчанию: localhost:27017
- **--db , -d : **Экземпляр базы данных для восстановления, например: test, конечно, это имя также может отличаться от резервной копии, например, test2
- **--drop:** При восстановлении сначала удалите текущие данные, а затем восстановите данные из резервной копии. То есть после восстановления данные, добавленные и измененные после резервного копирования, будут удалены, поэтому используйте его с осторожностью!
- **: **mongorestore — это последний параметр для установки местоположения данных резервной копии, например: /usr/local/mongodb/dump.
Вы не можете указать параметр --dir одновременно, --dir также может указать каталог резервного копирования.
- **--dir: ** Укажите каталог резервного копирования
Вы не можете указать параметр --dir одновременно.
mongorestore -h localhost:27017 -d asGiant -c user --dir /usr/local/mongodb/dump -u myz -p 12346
mongodump -u root -p 123456
mongorestore -u root -p 123456
4 конфигурации яйцо-мангуст
4.1 Установка
$ npm install egg-mongoose --save
4.2 Конфигурация
Измените файл конфигурации {workplace}/config/plugin.js в проекте Egg, чтобы включить плагин egg-mongoose:
exports.mongoose = {
enable: true,
package: 'egg-mongoose',
};
4.3 Яйцо соединяется с мангустом
Добавьте свойства в файл конфигурации {workplace}/config/default.js элемента конфигурации config в проекте Egg.
config.mongoose = {
url: process.env.EGG_MONGODB_URL || 'mongodb://127.0.0.1/website',
options: {
server: {
poolSize: 40,
},
},
};
способ подключения
config.mongoose = {
client: {
url: 'mongodb://账号:密码@服务器:端口/库名',
options: {},
},
};
5 Проектирование модели базы данных
5.1 Определите модель, которая является таблицей данных
Определите таблицу данных в {workplace}/app/model/article.js.
'use strict';
module.exports = app => {
const mongoose = app.mongoose;
const Schema = mongoose.Schema;
const RoleSchema = new Schema({
role: {
type: String,
index: {
unique: true,
}, // 该字段为唯一字段
require: true, // 必填项
},
roleName: {
type: String,
require: true,
},
// 备注
note: {
type: String,
require: true,
},
});
return mongoose.model('Role', RoleSchema, 'role');
};
5.2 Типы данных
тип данных | |
---|---|
Number | номер |
String | нить |
Boolean | Логическое значение |
ObjectId | Идентификатор объекта |
Array | множество |
Date | Дата |
Buffer | бинарный |
Mixed | смешанный тип |
6 Добавить данные
this.ctx.model.Article.create(post,callback);
Примечание: где post — структура данных json, а callback — функция обратного вызова после операции
7 Запросить данные
7.1 Получить все данные, возвращаемый массив
this.ctx.model.Article.find()
7.2 Получить данные, возвращаемый объект
this.ctx.model.Article.findOne()
7.3 Условный запрос
this.ctx.model.Article.find(conditions,callback);
Различают следующие виды состояний
7.3.1 Запрос на основе конкретных данных
this.ctx.model.Article.find({_id:5c4a819fb87ba4002a47bc4f,title:"123"},callback);
- Возвращает результат, _id которого равен 5c4a819fb87ba4002a47bc4f, а заголовок равен 123.
7.3.2 Условный запрос
"$lt" | меньше, чем |
---|---|
"$lte" | меньше или равно |
"$gt" | больше, чем |
"$gte" | больше или равно |
"$ne" | не равно |
this.ctx.model.Article.find({“sort”:{ $get:18 , $lte:30 });
- Возвращает результат сортировки больше или равный 18 и меньше или равный 30 в таблице статей.
7.3.3 ИЛИ запрос ИЛИ
"$in" | Ключ соответствует нескольким значениям |
---|---|
"$nin" | То же, что и выше, инвертировано, ключ не соответствует указанному значению |
"$or" | Несколько условий совпадают, вы можете использовать вложенный $in |
"$not" | То же самое, запрос документов, которые не соответствуют определенному шаблону |
this.ctx.model.Article.find({"title":{ $in:[20,21,22."haha"]} );
- Возвращает результаты в таблице статей, где заголовок равен 20, 21, 21 или «ха-ха».
this.ctx.model.Article.find({"$or" : [ {"age":18} , {"name":"wxw"} ] });
- Возвращает результат, где возраст равен 18 или имя равно "wxw" в таблице статей.
7.3.4 Запрос типа (определение условия "$exists")
this.ctx.model.Article.find({name: {$exists: true}},function(error,docs){
//返回Article表中所有存在name属性的结果
});
this.ctx.model.Article.find({telephone: {$exists: false}},function(error,docs){
//返回Article表中所有不存在telephone属性的结果
});
7.3.5 Сопоставление запросов регулярных выражений
MongoDb использует библиотеку регулярных выражений, совместимую с Prel, для соответствия регулярным выражениям.
this.ctx.model.Article.find( {"name" : /joe/i } );
- Возвращает результат с именем joe в таблице Article, игнорируя регистр.
7.3.6 Запрос массивов
this.ctx.model.Article.find({"array":10} );
- Возвращает документы со значением 10 в ключе массива (тип массива) в таблице статей, массив: [1,2,3,4,5,10] будет соответствовать
this.ctx.model.Article.find({"array[5]":10} );
- Возвращает значение, соответствующее индексу 5 в массиве (тип массива) ключ в таблице статей равен 10, массив: [1,2,3,4,5,10] будет соответствовать
this.ctx.model.Article.find({"array":[5,10]});
- Возвращает результаты как 5, так и 10 в массиве массивов соответствия запросу в таблице статей.
this.ctx.model.Article.find({"array":{$size : 3} });
- Возвращает результат запроса в таблице статей, соответствующий массиву длины массива 3.
this.ctx.model.Article.find({"array":{$slice : 10} });
- Возвращает первые 10 элементов массива массива соответствия запроса в таблице статей.
this.ctx.model.Article.find({"array":{$slice : [5,10]} });
- Возвращает с 5-го по 10-й элементы массива соответствия запроса в таблице статей.
7.3.7 where
Используйте его для выполнения произвольных операторов javacript как части запроса, и если функция обратного вызова возвращает значение true, документ возвращается как часть результата.
this.ctx.model.Article.find( {"$where" : "this.x + this.y === 10" } );
this.ctx.model.Article.find( {"$where" : " function(){ return this.x + this.y ===10; } " } )
- Где это данные в таблице данных, а приведенное выше возвращает все данные атрибута x+атрибут y=10 в таблице статей.
8 Удалить данные
this.ctx.model.Article.remove(conditions,callback);
Примечания: условия — это условия запроса, такие же, как и введение данных запроса, например: { _id: 5c4a819fb87ba4002a47bc4f }, найти данные, чей _id равен 5c4a819fb87ba4002a47bc4f, а обратный вызов — это функция обратного вызова после успешного выполнения операции.
9 Обновить данные
9.1 Обновление данных
this.ctx.model.Article.update(conditions, update, callback)
- Параметр 1: условие запроса, параметр 2: объект обновления, вы можете использовать модификатор обновления MondoDB.
Примечание. Условия аналогичны описанным в разделе Запрос данных.
9.2 update — это объект обновления
let post = {
wid: '5c492c57acbe363fd4824446',
column: [ '新闻' ],
titleHead: '',
img: '',
isAbstract: 'false',
}
this.ctx.model.Article.update({ _id: '5c4a819fb87ba4002a47bc4f ' }, post)
- Запросите конкретный _id в таблице статей и обновите атрибуты, содержащиеся в сообщении.
update использует модификатор обновления MondoDB, который имеет следующие сценарии использования
9.2.1 Модификатор увеличения/уменьшения "$inc", действительный только для чисел
this.ctx.model.Article.update({"age":22}, {$inc:{"age":1} } );
- Найдите документ с возрастом = 22, измените значение возраста документа, чтобы увеличить его на 1.
9.2.2 '$set' указывает значение ключа, и ключ создается, если он не существует. Это может быть любой тип, поддерживаемый MondoDB.
this.ctx.model.Article.update({ _id:5c4a819fb87ba4002a47bc4f }, { $set: { isDelete: true } });
- Мягко удалите таблицу 5c4a819fb87ba4002a47bc4f, найдите конкретные данные _id и добавьте или измените атрибут isDelete.
9.2.3 "$unset" то же, что и выше, удалить ключ
this.ctx.model.Article.update({age:22}, {$unset:{age:18} } );
- Ключ возраста не существует после выполнения
9.2.4 '$push' подталкивает член массива к ключу, если ключ не существует, он будет создан, допустимо для массивов
this.ctx.model.Article.update({name:'wxw'}, {$push:{array:10} } );
- Верните данные с именем wxw в таблицу Article, добавьте ключ массива, тип — массив, и есть член 10
9.2.5 '$addToSet' добавляет элемент в массив, если он не существует
this.ctx.model.Article.update({name:'wxw'},{$addToSet:{array:10} } );
- Возвращает данные с именем wxw в таблице Article, их в массиве 10, поэтому они не будут добавлены
9.2.6 'Модификатор push работает с несколькими значениями для вставки
this.ctx.model.Article.update({name:'wxw'}, {$push:{array:{$each: [1,2,3,4,5]}} } );
- Возвращает данные с именем wxw в таблице Article После выполнения массив: [10,1,2,3,4,5]
9.2.7 '$pop' удаляет элемент с конца массива
this.ctx.model.Article.update({name:'wxw'}, {$pop:{array:1} } );
- Возвращает данные с именем wxw в таблице статей, где массив: [10,1,2,3,4,5], после выполнения массив: [10,1,2,3,4]
- совет: измените 1 на -1, чтобы удалить первый элемент массива
9.2.8 '$pull' удаляет указанный элемент из массива
this.ctx.model.Article.update({name:'wxw'}, {$pull:{array:10} });
- Возвращает данные с именем wxw в таблице Article и удаляет их после совпадения 10 в массиве.
10 Сортировать (сортировать)
this.ctx.model.Article.sort({ isSetTop: -1, sort: 1, editTime: -1 });
- Отсортируйте данные в таблице статей, сначала по «isSetTop» в порядке убывания, затем по «sort» по возрастанию и, наконец, по «editTime» в порядке убывания.
Примечание. Ключ соответствует имени ключа в данных, а значение представляет направление сортировки: 1 для возрастания, -1 для убывания.
11 Ограничить количество возвращаемых результатов (лимит)
this.ctx.model.Article.limit(3);
- Возвратите данные в таблице Article и верните первые 3 фрагмента данных.
12 Пропустить первые 3 документа и вернуть остальные (пропустить)
this.ctx.model.Article.skip(3);
- Вернуть данные в таблице Article, пропустить первые 3 фрагмента данных и вернуть остальные данные.
Приложение: Комплексное использование последних трех методов для запроса на подкачку
this.ctx.model.Article.find({ _id:5c4a819fb87ba4002a47bc4f }).skip(pageSize * (pageNum - 1)).limit(parseInt(pageSize)).sort({ isSetTop: -1, sort: 1, editTime: -1 });
- Среди них pageSize и pageNum являются динамически передаваемыми данными, возвращают данные на странице pageNum определенного _id в таблице Article при условии, что данные каждой страницы равны pageSize, и в соответствии с порядком убывания "isSetTop", затем "сортировать " в порядке возрастания и, наконец, "editTime" " для сортировки в порядке убывания.