1. Что такое база данных MongoDB?
MongoDB написана на языке C++ и представляет собой систему баз данных с открытым исходным кодом, основанную на распределенном хранилище файлов.
Запись в MongoDB — это документ, структура данных, состоящая из пар полей и значений. Документы MongoDB аналогичны объектам JSON. Значения полей могут включать в себя другие документы, массивы и массивы документов.
2. Установка и среда
Адрес загрузки MongoDB
Установка Windows: см.ооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооо.
Установка Linux: см.ооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооо.
Установка Mac: см.ооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооо.
3. Создание базы данных, сбор и удаление базы данных, сбор
Откройте оболочку Mongo
use test
Это создаетtestБаза данных, но на этот раз база данных все еще пуста, используйте следующую команду для просмотра
show dbs
Видно, что нетtestЭта база данных (база данных Lianjia создана раньше, все игнорируют, ха-ха!!)
admin 0.000GB
lianjia 0.000GB
local 0.000GB
Добавить коллекцию в базу данных (collection)
db.createCollection('фильмы')
{ "хорошо" : 1 }
мы выполнимshow dbs,testБаза данных отображается! !
admin 0.000GB
lianjia 0.000GB
local 0.000GB
test 0.000GB
не сейчасmoviesЭта коллекция, выполните команду удаления
db.movies.drop()
true
воплощать в жизньshow collectionsКоманды больше не будут появляться в наборах
Затем выполните команду для удаления базы данных
db.dropDatabase()
Оболочка возвращает { "dropped" : "test", "ok" : 1 }, чтобы удалить его! ! , а затем подтвердите базу данных
show dbs
testБаза данных исчезла
admin 0.000GB
lianjia 0.000GB
local 0.000GB
4. Вставьте документ
Сначала создайте базу данных и коллекцию, не забудьте!
# 创建数据库
use test
# 创建集合
db.createCollection('movies')
# 查看数据库
show dbs
Побег из Шоушенка
Возьмем в качестве примера «Побег из Шоушенка» и сохраним информацию о фильме в MongoDB.
- название фильма
- директор
- сценарист
- в главных ролях
- Типы
- страна производства
- язык
- время выпуска
- Длина
- счет
вставить данные
db.movies.insert(
… {
… название: «Побег из Шоушенка»,
…directed_by: 'Фрэнк',
… актер: ['Морган Морриман', 'Роббинс'],
… тип: «сюжет»,
… страна: «США»,
… английский язык',
… время выпуска: «10 сентября 1994 г.»,
… время: «142»,
… оценка: 9,6
… }
… )
операция вставкиНесколько замечаний:
- Данные состоят из пар ключ-значение ключ:значение, чем-то похожих на JSON.
- Если у ключа есть несколько значений, значение должно использовать []. Сейчас есть только одно значение, и оно будет добавлено позже. Вы можете использовать [] заранее.
- Используйте фигурные скобки {} для всего блока данных
Оболочка предъявляет очень высокие требования к формату.Запятые и в китайском и в английском одинаковые и невооруженным глазом не отличить.Все должны обращать внимание на формат,иначе будет пустая трата времени сообщать об ошибках. . . . ,ВидетьWriteResult({ "nInserted" : 1 }), указывая на то, что запись прошла успешно
Данные запроса
db.movies.find().pretty()
данные возвращены
{
"_id": идентификатор объекта ("5a1ff3a6bff1b3cbd8e8f812"),
"название": "Побег из Шоушенка",
"directed_by": "Фрэнк",
"актер" : [
«Морган Морриман»,
"Роббинс"
],
"тип": "сюжет",
"страна": "США",
"английский язык",
"Время_релиза": "10 сентября 1994 г.",
"время": "142",
«Оценка»: 9,6
}
используется здесьpretty(), его роль состоит в том, чтобы вернуть улучшенные данные, использоватьdb.movies.find()
Возвращенные данные представляют собой кусок --! ! ! Можешь попробовать!
{ "_id" : ObjectId("5a1fee21bff1b3cbd8e8f80f"), "title" : "Побег из Шоушенка", "directed_by" : "Фрэнк", "actor" : [ "Морган Морриман", "Роббинс" ], "type" : " сюжет», «страна»: «США», «язык»: «английский», «время выпуска»: «10 сентября 1994», «время»: «142», «оценка»: «9,6» }
Вставьте несколько данных одновременно
db.movies.insert([
… {
… название: «Побег из Шоушенка»,
…directed_by: 'Фрэнк',
… актер: ['Морган Морриман', 'Роббинс'],
… тип: «сюжет»,
… страна: «США»,
… английский язык',
… время выпуска: «10 сентября 1994 г.»,
… время: «142»,
… оценка: 9,6
… },
… {
… Название: 'Прощай, моя наложница',
… Режиссер: «Чен Кайгэ»,
… актер: ['Лесли Чунг', 'Гонг Ли'],
… тип: «сюжет»,
… страна: «Китай»,
... Язык: «Китайский общий закон»,
… время выпуска: «1993-01-01»,
… время: «171»,
… оценка: 9,5
… }
… ])
Если вставка прошла успешно, он вернет
BulkWriteResult({
"Ошибки записи" : [ ],
"writeConcernErrors": [ ],
"nInserted": 2,
"nUpserted": 0,
"nMatched": 0,
"nModified" : 0,
"nRemoved": 0,
"поднялся" : [ ]
})
Режим вставки нескольких данных:db.collection.insert([{ключ1: 'значение1'}, {ключ2: 'значение2'}]
5. Запросить данные
запрос с конкретными условиями
db.movies.find({'язык': 'Общее китайское право'}).pretty()
Посмотрим на возвращенные данные
{
"_id": идентификатор объекта ("5a1ff19bbff1b3cbd8e8f811"),
«название»: «Прощай, моя наложница»,
"directed_by": "Чен Кайгэ",
"актер" : [
«Лесли Чунг»,
"Гонг Ли"
],
"тип": "сюжет",
"страна": "Китай",
"язык": "Общее право Китая",
"Время_релиза": "1993-01-01",
"время": "171",
"оценка": 9,5
}
ANDУсловный запрос
db.movies.find({'title':'Прощай, моя наложница', 'language':'Общий закон Китая'}).pretty()
Будут найдены только фильмы, отвечающие обоим условиям.
ИЛИ условный запрос
db.movies.find({$or:[{'title':'Прощай, моя наложница'}, {'language':'English'}]}).pretty()
Скобки здесь немного сложны, поэтому будьте осторожны при написании
условный оператор
Оператор "больше чем" - $gt, находит фильмы с рейтингом выше 9
db.movies.find({‘score’:{$gt:9}}).pretty()
Меньше, чем оператор - $lt
db.movies.find({‘score’:{$lt:10}}).pretty()
Есть похожие операторы, оператор больше или равно - $gte, оператор меньше или равно - $lte, оператор не равно - $ne
Я не буду перечислять их все здесь, как и выше
ограничить и пропуститьусловный оператор
Метод limit() принимает числовой параметр, указывающий количество записей для чтения из MongoDB.
db.movies.find().limit(1).pretty()
Это возвращает информацию о фильме
{
"_id": ObjectId("5a1feb04bff1b3cbd8e8f80e"),
"название": "Побег из Шоушенка",
"directed_by": "Фрэнк",
«актер»: «Морган Морриман»,
"тип": "сюжет",
"страна": "США",
"английский язык",
"Время_релиза": "10 сентября 1994 г.",
"время": "142",
"оценка": 9,6
}
skip(), чтобы пропустить указанное количество данных, метод skip также принимает числовой параметр в виде количества пропущенных записей.
db.movies.find().skip(1).pretty()
6. Удалить документы
db.movies.remove({'title': 'Прощай, моя наложница'})
Удалите документ с заголовком «Прощай, моя наложница», а затем запросите оставшиеся документы.
db.movies.find()
7. Обновление документации
db.movies.update({'title':'Побег из Шоушенка'},{$set:{'title':'MongoDB_Test'}})
Изменить значение на MongoDB_Test
{
"_id": идентификатор объекта ("5a200300bff1b3cbd8e8f813"),
"заголовок": "MongoDB_Test",
"directed_by": "Фрэнк",
"актер" : [
«Морган Морриман»,
"Роббинс"
],
"тип": "сюжет",
"страна": "США",
"английский язык",
"Время_релиза": "10 сентября 1994 г.",
"время": "142",
"оценка": 9,6
}
$setОператор означает обновление поля в документе, а не замену всех
{ $ установить: { :
, … } }
Чтобы изменить несколько одинаковых документов, просто установите для параметра multi значение true.
db.movies.update({'title':'Побег из Шоушенка'},{$set:{'title':'MongoDB_Test'}},{multi:true})
Вышеупомянутые две операции изменят исходные данные. Если вы хотите добавить значение на основе исходного значения, вам нужно добавить$push, например, добавление нового актера к актеру
db.movies.update({'title':'Прощай, моя наложница'}.{$push:{'actor':'Treehl'}})
Итак, у актера три актера
актер" : [
«Лесли Чунг»,
«Гонг Ли»,
"Трил"
]
8. Сортировка и индексация
sort()метод
Для сортировки данных метод sort() может указать поле сортировки через параметры и использовать 1 и -1 для указания метода сортировки, где 1 для возрастания, а -1 для убывания.
Например, возьмем в качестве примера оценку рейтинга фильма.
db.movies.find().sort({'score':1}).pretty()
ensureIndex()метод
Индексы обычно могут значительно повысить эффективность запросов.Без индексов MongoDB должна сканировать каждый файл в коллекции и выбирать те записи, которые удовлетворяют условиям запроса при чтении данных. Добавление индекса к некоторым ключам в документе может ускорить скорость поиска, например, добавление индекса к типу типа фильма, чтобы строка типа фильма сопоставлялась с числом, и скорость поиска будет намного выше.
db.movies.ensureIndex({'тип':1})
1: по возрастанию, -1: по убыванию
9. Агрегация
Aggregate в MongoDB в основном используется для обработки данных (таких как среднее статистическое, суммирование и т. д.) и возврата результатов расчетных данных.
> db.movies.aggregate([{$group:{_id:'$title',num_movies:{$sum:1}}}])
вернуть
{ "_id": "Прощай, моя наложница", "num_movies" : 1 }
{ "_id": "MongoDB_Test", "num_movies": 1}
понять команду
$group: 将集合中的文档分组,可用于统计结果
$sum:计算总和
Рекомендуется обратиться к учебнику для новичков.полимеризация
10. Операция Python MongoDB
from pymongo import MongoClient
# 链接数据库
client = MongoClient('localhost', 27017)
# 建立douban数据库
db = client.douban
# 建立movies集合
movies = db.movies
movie_name_list = []
movie_name = {
'title': '肖申克的救赎',
'description': '小有成就的青年银行家安迪',
'year': '1991'
}
movie_name_list.append(movie_name)
# 使用for循环打印出数据
for item in movie_name_list:
movies.insert(item)
# 查找数据
for item in movies.find():
print(item)
вернуть
{'_id': ObjectId('5a20c4f3aa85c109e881c7c7'), 'title': '肖申克的救赎', 'description': '小有成就的青年银行家安迪', 'year': '1991'}
Это простой пример Python Experient Mongodb. Если вы заинтересованы, вы можете прочитать мою [Python Crawl Shanghai Lianjia Listing и хранить его в базе данных Mongodb (Генеалогическое древо использует .github.io/2017/11/29/...)
Я считаю, что после прочтения вы сможете получить базовое представление о MongoDB! ! !
Ссылка на ссылкуучебник для новичков
Добро пожаловать на мой блогБлог Трила
короткая книга
GitHub