тема яйца-мангуста

Mongoose

Управляемое чтение

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 Завершение пагоды в один клик

image.png

1.4 Установить пароль

1.4.1 Введите каталог bin пути установки

cd /www/server/mongodb/bin

1.4.2 Введите командную строку mongo, чтобы войти в среду mongodb

mongo

image.png

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, должны указать имя пользователя и пароль.

image.png

Если вы используете пагоду для завершения одного клика

может быть изменен с помощьюmongodbконфигурационный файл для реализации

image.png

превратиться в

image.png

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 Порт выпуска

image.png

2 Соединение инструмента

2.1 Скачать робо 3т

image.png

image.png

создать соединение

image.png

image.png

нажмите тест

image.png

Установка завершена

image.png

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 'each'遍历数组和Модификатор 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" " для сортировки в порядке убывания.