Вы хотите ускорить mongodb? Вы можете взглянуть на эту серию руководств (2)
1. Введение в монгодб
-
MongoDB написана на языке C++ и представляет собой систему баз данных с открытым исходным кодом, основанную на распределенном хранилище файлов.
-
В случае высокой нагрузки добавление дополнительных узлов может гарантировать производительность сервера.
-
MongoDB стремится предоставить масштабируемое, высокопроизводительное решение для хранения данных для веб-приложений.
-
MongoDB хранит данные в виде документа, а структура данных состоит из пар ключ-значение (ключ=>значение). Документы MongoDB аналогичны объектам JSON. Значения полей могут содержать другие документы, массивы и массивы документов
2. адрес загрузки mongodb
Woohoo. MongoDB.com/download-testing…Выберите версию, которая подходит вам.
- Следует отметить, что, например, под Windows после завершения установки вам необходимо установить переменную среды в каталог bin папки, в которую вы установили mongodb.
- Например, я установил mongodb в E:\mongodb, поэтому каталог bin — E:\mongodb\bin.
3. Применимые сценарии и основные понятия mongodb
3.1 Применимые сценарии MongoDB
-
Данные большого размера и малой ценности, такие как данные веб-сайта и кеш.
-
В сценариях с высокой масштабируемостью он используется для хранения объектов и данных JSON.
3.2 Основные понятия MongoDB
база данных
Экземпляр MongoDB может иметь одну или несколько независимых баз данных, каждая со своими коллекциями.
собирать
Коллекции можно рассматривать как таблицы с динамическими схемами.
Документация
Документ — это основная единица данных в MongoDB, похожая на строку RDB. Документ представляет собой упорядоченный набор пар ключ-значение. В JS документы представлены как объекты.
_id
Каждый документ имеет специальный «_id», уникальный в пределах коллекции, к которой принадлежит документ.
JavaScript shell
MongoDB поставляется с мощной оболочкой JavaScript, которую можно использовать для управления или эксплуатации MongoDB.
Пример
- База данных Один экземпляр MongoDB может поддерживать несколько независимых баз данных, например, система управления студентами может соответствовать экземпляру базы данных.
- Коллекции Базы данных состоят из коллекций, коллекция используется для представления объекта, например, набора студентов.
- Коллекция документов состоит из документов, один документ представляет собой одну запись, например, одноклассник Чжан Сан является документом.
4. Добавляйте и удаляйте сервисы
Добавить сервис в инструмент командной строки
mongod.exe --dbpath E:\mongodata --logpath E:\mongolog --logappend --directoryperdb --serviceName mongodb --install
- --Dbpath Задает каталог для хранения данных
- --logpath куда поместить логи
- --logappend метод записи лога, можно добавить старый лог
- --directoryperdb хранить каждую базу данных отдельно
- Имя службы из --serviceName вызывается
- --install установить службу На следующем рисунке показано, что служба успешно добавлена
5. запуск и подключение mongodb
Запустите службу монгодб
mongod --dbpath=E:\Mongodb\data
Если появляется сообщение Ожидание соединений на порту 27017, это означает, что запуск прошел успешно, и запрос клиента отслеживался на порту 27017 Примечание: Инструкции по запуску
Опции | имея в виду |
---|---|
--port | Укажите номер порта службы, порт по умолчанию 27017. |
--logpath | Укажите файл журнала MongoDB, обратите внимание, что указанный файл не является каталогом |
--logappend | запись журнала с помощью добавления |
--dbpath | Укажите путь к базе данных |
--directoryperdb | Настройки для каждой базы данных будут сохранены в отдельном каталоге |
Затем откройте новое окно командной строки и введите
mongo
ссылка на базу данных
Наконец, мы представляем инструмент визуализации mongodb Studio3T.
6. Работа с базой данных
6.1 Использование базы данных
use database_name
// 例如我们这里可以建一个叫school的数据库
use school
database_nameимя базы данных
ПРИМЕЧАНИЕ. Если эта база данных существует, то переключитесь к этому в базе данных, если база данных еще не существует, не может быть разрезана, но она не сразу создает базу данных Переключиться в школьную базу данных
6.2 Просмотр всех баз данных
show dbs
Примечание. Если только что созданной нами базы данных школы нет в списке, для ее отображения нам необходимо вставить некоторые данные в базу данных школы. db.students.insert({возраст:1});
после инертных данных
6.3 Просмотр текущей используемой базы данных
db
Примечание: db представляет собой текущую базу данных, то есть школьную базу данных.
6.4 Удалить базу данных
db.dropDatabase()
школьная база данных исчезла
7. Операция сбора
7.1 Просмотр справки коллекции
use demo
db.demo.help()
7.2 Создание коллекции
7.2.1 Создание пустой коллекции
db.createCollection(collection_Name)
collection_Name Имя коллекции
7.2.2 Создание коллекции и вставка документа
collection_Name Имя коллекции задокументировать вставляемый документ
db.collection_Name.insert(document)
// 例如
db.demo.insert({age:1})
Примечание. Идентификатор объекта на изображении выше является обычным, правила следующие.
Раньше, когда мы использовали реляционные базы данных, такие как MySQL, первичный ключ устанавливался на автоинкремент. Но в распределенной среде этот метод неосуществим, и возникнут конфликты. С этой целью MongoDB использует тип ObjectId в качестве первичного ключа. ObjectId — это 12-байтовая строка типа BSON. В порядке байтов один представляет:
- | - |
---|---|
4 байта: | Временная метка UNIX |
3 байта: | Представляет машину, на которой работает MongoDB. |
2 байта: | Указывает процесс, сгенерировавший этот _id |
3 байта: | Значение, сгенерированное счетчиком, начиная со случайного числа |
7.3 Просмотр коллекции в базе данных
show collections
7.4 Просмотр текущей коллекции
db.getName() 或者 db
7.5 Удалить текущую коллекцию
db.dropDatabase()
8. Вставьте документ
8.1 insert
db.collection_name.insert(document);
collection_name Имя коллекции
документ вставленный документ
Примечание. Всякий раз, когда вставляется новый документ, mongodb автоматически генерирует атрибут _id для этого документа, _id должен быть уникальным, а _id, используемый для уникальной идентификации документа, также может быть указан напрямую, но если в базе данных уже есть набор Вставка этого _id не удастся
db.demo.insert({_id:1,age:1});
8.2 save
db.collection_name.save(document)
collection_name Имя коллекции документ вставленный документ
Примечание. Если поле _id не указано, метод save() аналогичен методу insert(). Если поле _id указано, данные для этого _id обновляются.Мы сохраняем данные с id = 1, которые мы сохранили ранее, чтобы увидеть, был ли обновлен этот фрагмент данных.
db.demo.save({_id:1, age:2})
9. Обновление документации
db.collection.update(
<query>,
<updateObj>,
{
upsert: <boolean>,
multi: <boolean>
}
)
параметр | - |
---|---|
query | Условия запроса, указывающие, какие документы для обновления соответствуют условиям |
update | обновленный объект или указать какой-либо оператор обновления |
$set | Накопить на исходной основе |
upsert | Необязательный, этот параметр указывает, следует ли вставлять updateObj, если нет подходящей записи.По умолчанию установлено значение false, которое не вставляется. |
multi | Необязательно, mongodb обновляет только первую запись, найденную по умолчанию. Если этот параметр имеет значение true, он обновляет все подходящие записи. |
9.1 Обновление документации
db.demo.insert({name: 'zhangsan'});
db.demo.update({name:'zhangsan'},{age:12})
9.2 upsert
Измените значение имени lisi в данных в коллекции студентов на lisi, так как в исходной таблице нет имени: lisi, этот фрагмент данных не будет вставлен, но для параметра upsert установлено значение true и вставка прошла успешно.
db.demo.update({name:'lisi'}, {name:'lisi'}, {upsert:true});
9.3 multi
Если есть несколько фрагментов данных, возраст которых равен 1, будет обновлен только один. Если вы хотите обновить их все, вам нужно указать параметр {multi:true}
db.school.insert({age:1});
db.school.insert({age:1});
db.school.insert({age:1});
db.school.update({age:1}, {$set:{name:'lisi'}}, {multi:true});
db.school.find({})
10. Оператор обновления
10.1 $set
Укажите обновленное значение напрямую
use c3;
db.c3.insert({name:'a'});
db.c3.update({name:'a'},{$set:{age:10}});
db.c3.find({})
10.2 $inc
Накопить на исходной основе
db.c3.update({name:'a'},{$inc:{age:1}});
10.3 $unset
удалить указанный ключ
db.c3.update({name:'2'},{$unset:{age:11}});
10.4 $push
добавить элемент в массив
var result = db.student.update({name:'张三'},{
$push:{"hobbys":"smoking"}
});
10.5 $ne
$ne похож на MYSQL, которого нет или не существует
db.c3.update({hobbys:{$ne:"eating"}},{$push:{"hobbys":"sleeping"}});
10.6 $addToSet
Добавить элементы в коллекцию
db.c3.update({a:1},{$addToSet:{"hobbys":"smoking"}});
10.7 $each
Добавляйте элементы массива в коллекцию один за другим
db.a.insert({name:'a', hobbys:[1,2]});
db.a.update({name:'a'},{$addToSet:{hobbys:{$each:[3,4]}}});
db.a.find()
10.8 $pop
Удаляет соответствующий элемент по указанному индексу из массива
- {$pop:{"key":1}} удаляет элемент AND из конца массива
- {$pop:{"key":-1}} удаляет элемент И из начала массива
db.c3.update({name:'a'},{$pop:{hobbys:1}});
db.c3.find()
10.9 Изменить указанный элемент индекса
db.c3.update({name:'zfpx1'},{$set:{"hobbys.0":"smoking2"}});
11. Удаление документов
Метод remove используется для удаления данных из коллекции.
11.1 Синтаксис
db.collection.remove(
<query>,
{
justOne: <boolean>
}
)
11.2 Параметры
- | - |
---|---|
query | (Необязательно) Условия для удаленных документов. |
justOne | (Необязательно) Если установлено значение true или 1, будет удален только первый из нескольких совпадающих документов. |
11.3 Примеры
Удалите все данные документа с именем zfpx2 в рабочей коллекции.
db.c3.remove({name:'a'});
Удалить только один, даже если он соответствует более чем одному
db.c3.remove({name:'a'},{justOne:true});
12. Запросить документы
12.1 find
грамматика
db.collection_name.find()
параметр
- | - |
---|---|
collection_name | название коллекции |
пример
Все документы по запросу C3
db.students.find()
12.2 Запрос указанного столбца
грамматика
db.collection_name.find({queryWhere},{key:1,key:1})
список параметров
- | - |
---|---|
collection_name | название коллекции |
queryWhere | См. Операторы условия запроса |
key | указать столбцы для возврата |
1 | показывать |
пример
вернуть только отображаемый столбец возраста
db.c3.insert([{name:1,age:2},{name:1,age:3},{name:1,age:4}]);
db.c3.find({},{_id:0, age:1});
12.3 findOne
Запросить первые данные совпадающих результатов Синтаксис
db.collection_name.findOne()
пример
db.c3.findOne()`
12.4 $in
Поле запроса находится в диапазоне
db.c3.insert([{age:30, name:1},{age:100, name:2},{age:40, name:3},{age:60, name:4}])
db.c3.find({age:{$in:[30,100]}},{name:1,age:1});
12.5 $nin
Поле запроса не входит в диапазон
db.c3.find({age:{$nin:[30,100]}},{name:1,age:1});
12.6 $not
Отменить конкретное условие
db.c3.find({age:{$not:{$gte:20,$lte:30}}});
12.7 array
запрос к массиву
// 按所有元素匹配
db.c3.find({friends:[ "A", "B", "C", "D" ]});
//匹配一项 包含A的就可以
db.c3.find({friends:"A"});
// $all 必须同时包含A B
db.c3.find({friends:{$all:['A',"B"]}});
// $in 或者关系 ,包含A或者B
db.c3.find({friends:{$in:['A',"B"]}});
//$size 按数组的长度去匹配
db.c3.find({friends:{$size:4}});
//$slice 只返回数组中的某一部分
db.c3.find({friends:{$size:5}},{name:1,friends:{$slice:2}});
db.c3.find({friends:{$size:5}},{name:1,friends:{$slice:-2}});
$slice:["$array", [startIndex, ] length ] (startIndex可以省略,默认从0开始)
db.c3.find({},{friends:{$slice:[0,3]}});
12.8 where
db.c3.find({$where:"this.age>30"},{name:1,age:1});
12.9 cursor
Курсор — это не результат запроса, а возвращаемый ресурс или интерфейс запроса, через этот интерфейс данные можно читать по одному
var result = db.student.find();
while(result.hasNext()){
printjson(result.next());
}
13. Условные операторы
Условный оператор используется для сравнения двух выражений и получения данных из коллекции mongoDB.
13.1 Операторы больше, больше, чем равно, меньше чем, меньше чем равно
параметр
- | - |
---|---|
$gt | больше, чем |
$gte | больше или равно |
$lt | меньше, чем |
$lte | меньше или равно |
13.2 Запрос с _id
грамматика
db.collectoin_name.find({"_id" : ObjectId("value")})
query_id — это данные 562af23062d5a57609133974.
db.stuc3dents.find({_id:ObjectId("5adb666ecd738e9771638985")});
13.8 Количество наборов результатов запроса
грамматика
db.collectoin_name.find().count();
db.c3.find().count()
13.9 Обычное сопоставление
грамматика
db.collection.find({key:/value/})
параметр
- | - |
---|---|
collectoin_name | название коллекции |
key | поле |
value | стоимость |
Запросите данные, содержащие joe в имени, обычное может соответствовать только строке
db.user.find({name:/joe/})
14. И и или
14.1 and
Метод find может передавать несколько ключей (ключей), каждый ключ (ключ) отделяется запятой
грамматика
db.collection_name.find({key1:value1, key2:value2})
Данные запроса, имя которых равно 1, а возраст равен 30.
db.students.find({name:1,age:30})
14.2 or
грамматика
db.collection_name.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
)
Данные запроса с возрастом = 30 или возрастом = 100
db.c3.find({$or:[{age:30},{age:100}]})
14.3 объединение и или или или или или
грамматика
db.collection_name.find(
{
key1:value1,
key2:value2,
$or: [
{key1: value1},
{key2:value2}
]
}
)
Пример Данные запроса, возраст которых равен 30, а имя равно 1 или имя равно 3.
db.c3.find({age: 30, $or:[{name:1},{age:3}]})
15. Пейджинговый запрос
15.1 limit
Прочитать указанное количество записей данных Синтаксис
db.collectoin_name.find().limit(number)
var a = [];
for(var i = 0;i<10;i++){
a.push({age:i})
};
db.c3.insert(a);
db.students.find().limit(3)
15.2 skip
Пропустить указанный объем данных.Метод skip также принимает числовой параметр в виде количества пропущенных записей.Синтаксис
db.collectoin_name.find().skip(number)
db.c3.find().skip(3)
15.3 skip+limit
Пагинация обычно реализуется таким образом Синтаксис
db.collectoin_name.find().skip(skipNum).limit(limitNum)
db.c3.find().skip(3).limit(3);
15.4 сортировка сортировки
Метод sort() может указывать поле сортировки по параметрам и использовать 1 и -1 для указания метода сортировки, где 1 соответствует возрастанию, а -1 — убыванию. грамматика
db.collectoin_name.find().sort({key:1})
db.collectoin_name.find().sort({key:-1})
db.c3
![](https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2019/4/9/169fff28b40c6b57~tplv-t2oaga2asx-image.image).find().sort({age:1})