Эта статья является частью нашего курса Академии под названием MongoDB — A Scalable NoSQL DB .
В этом курсе вы познакомитесь с MongoDB. Вы узнаете, как установить его и как управлять им через оболочку. Кроме того, вы узнаете, как получить программный доступ к нему через Java и как использовать Map Reduce с ним. Наконец, будут объяснены более сложные понятия, такие как шардинг и репликация. Проверьте это здесь !
Содержание
1. Введение
В этой заключительной части руководства мы рассмотрим модель безопасности MongoDB , различные типы индексов, планы запросов и профилирование, серверные курсоры и массовые операции.
2. Безопасность
Функции безопасности MongoDB включают аутентификацию, авторизацию и аудит. Его основой является управление доступом на основе ролей с гибким набором привилегий. Стоит отметить, что MongoDB обеспечивает основу для пользовательских ролей, определяя набор встроенных ролей (более подробную информацию см. В официальной документации ). Как всегда, оболочка MongoDB предоставляет богатый набор командных помощников для настройки безопасности.
команда | Создать пользователя | ||
параметры |
|
||
обертка | db.createUser (пользователь, writeConcern) | ||
Описание | Команда создает нового пользователя с именем username в текущей базе данных. Если пользователь с таким именем уже существует, возникнет ошибка. | ||
пример | В оболочке MongoDB давайте выполним команду:
|
||
Ссылка | http://docs.mongodb.org/manual/reference/command/createUser/
http://docs.mongodb.org/manual/reference/method/db.createUser/ |
Создать пользователя
команда | updateUser | ||
параметры |
|
||
обертка | db.updateUser (имя пользователя, обновление, writeConcern) | ||
Описание | Команда обновляет данные пользователя с именем username в текущей базе данных. Обратите внимание, что обновление свойства полностью заменяет предыдущие значения свойства (включая обновления ролей пользователя). | ||
пример | В оболочке MongoDB давайте createUser команду (чтобы обновить пользователя, созданного ранее командой createUser ):
|
||
Ссылка | http://docs.mongodb.org/manual/reference/command/updateUser/
http://docs.mongodb.org/manual/reference/method/db.updateUser/ |
updateUser
команда | dropUser | ||
параметры |
|
||
обертка | db.dropUser (имя пользователя, writeConcern) | ||
Описание | Команда удаляет пользователя с именем username из текущей базы данных. | ||
пример | В оболочке MongoDB , давайте createUser команду (чтобы удалить пользователя, созданного ранее командой createUser ):
|
||
Ссылка | http://docs.mongodb.org/manual/reference/command/dropUser/
http://docs.mongodb.org/manual/reference/method/db.dropUser/ |
dropUser
команда | db.changeUserPassword (имя пользователя, пароль) |
Описание | Команда обновляет пароль для существующего пользователя с именем username . |
пример | В оболочке MongoDB давайте createUser команду (чтобы удалить пользователя, ранее созданного командой createUser ): db.changeUserPassword("testuser", "newpassword")
|
Ссылка | http://docs.mongodb.org/manual/reference/method/db.changeUserPassword/ |
db.changeUserPassword
команда | dropAllUsersFromDatabase | ||
параметры |
|
||
обертка | db.dropAllUsers (writeConcern) | ||
Описание | Команда удаляет всех пользователей из текущей базы данных. Возвращает количество удаленных пользователей. | ||
пример | В оболочке MongoDB давайте db.dropAllUsers() команду: db.dropAllUsers()
|
||
Ссылка | http://docs.mongodb.org/manual/reference/command/dropAllUsersFromDatabase/
http://docs.mongodb.org/manual/reference/method/db.dropAllUsers/ |
dropAllUsersFromDatabase
команда | grantRolesToUser | ||
параметры |
|
||
обертка | db.grantRolesToUser (имя пользователя, роли, writeConcern) | ||
Описание | Команда предоставляет дополнительные роли пользователю с именем username . | ||
пример | В оболочке MongoDB давайте createUser команду (для предоставления ролей пользователю, ранее созданному командой createUser ):
|
||
Ссылка | http://docs.mongodb.org/manual/reference/command/grantRolesToUser/
http://docs.mongodb.org/manual/reference/method/db.grantRolesToUser/ |
grantRolesToUser
команда | revokeRolesFromUser | ||
параметры |
|
||
обертка | db.revokeRolesFromUser (имя пользователя, роли, writeConcern) | ||
Описание | Команда удаляет одну или несколько ролей пользователя с именем username в текущей базе данных. | ||
пример | В оболочке MongoDB давайте createUser команду (чтобы отозвать роли для пользователя, ранее созданного командой createUser ):
|
||
Ссылка | http://docs.mongodb.org/manual/reference/command/revokeRolesFromUser/
http://docs.mongodb.org/manual/reference/method/db.revokeRolesFromUser/ |
revokeRolesFromUser
команда | usersInfo | ||
параметры |
|
||
обертка | db.getUser (имя пользователя)
db.getUsers () |
||
Описание | Команда возвращает информацию об одном или нескольких пользователях в базе данных. | ||
пример | В оболочке MongoDB давайте createUser команду (чтобы получить информацию о пользователе, ранее созданном командой createUser ): db.getUser("testuser") (или, альтернативно, db.getUsers() )
|
||
Ссылка | http://docs.mongodb.org/manual/reference/command/usersInfo/
http://docs.mongodb.org/manual/reference/method/db.getUser/ http://docs.mongodb.org/manual/reference/method/db.getUsers/ |
usersInfo
команда | createRole | ||
параметры |
|
||
обертка | db.createRole (role, writeConcern) | ||
Описание | Команда создает пользовательскую роль с именем rolename и определенным набором привилегий. Роль будет применима к текущей базе данных. | ||
пример | В оболочке MongoDB давайте выполним команду:
|
||
Ссылка | http://docs.mongodb.org/manual/reference/command/createRole/
http://docs.mongodb.org/manual/reference/method/db.createRole/ |
createRole
команда | updateRole | ||
параметры |
|
||
обертка | db.updateRole (rolename, update, writeConcern) | ||
Описание | Команда обновляет пользовательскую роль с именем rolename в текущей базе данных. Обратите внимание, что обновление свойства полностью заменяет предыдущие значения свойства (включая обновления ролей и привилегий). | ||
пример | В оболочке MongoDB давайте createRole команду (чтобы обновить роль, созданную ранее командой createRole ):
|
||
Ссылка | http://docs.mongodb.org/manual/reference/command/updateRole/
http://docs.mongodb.org/manual/reference/method/db.updateRole/ |
updateRole
команда | dropRole | ||
параметры |
|
||
обертка | db.dropRole (rolename, writeConcern) | ||
Описание | Команда удаляет пользовательскую роль с именем rolename из текущей базы данных. | ||
пример | В оболочке MongoDB давайте createRole команду (чтобы удалить роль, созданную ранее командой createRole ): db.dropRole( "testrole" )
|
||
Ссылка | http://docs.mongodb.org/manual/reference/command/dropRole/
http://docs.mongodb.org/manual/reference/method/db.dropRole/ |
dropRole
команда | dropAllRolesFromDatabase | ||
параметры |
|
||
обертка | db.dropAllRoles (writeConcern) | ||
Описание | Команда удаляет все пользовательские роли из текущей базы данных. Возвращает количество удаленных ролей. | ||
пример | В оболочке MongoDB давайте db.dropAllRoles() команду: db.dropAllRoles()
|
||
Ссылка | http://docs.mongodb.org/manual/reference/command/dropAllRolesFromDatabase/
http://docs.mongodb.org/manual/reference/method/db.dropAllRoles/ |
dropAllRolesFromDatabase
команда | grantPrivilegesToRole | ||
параметры |
|
||
обертка | db.grantPrivilegesToRole (rolename, привилегии, writeConcern) | ||
Описание | Команда назначает дополнительные привилегии пользовательской роли с именем rolename, определенным в текущей базе данных. | ||
пример | В оболочке MongoDB давайте createRole команду (чтобы предоставить больше привилегий роли, созданной ранее командой createRole ):
|
||
Ссылка | http://docs.mongodb.org/manual/reference/command/grantPrivilegesToRole/
http://docs.mongodb.org/manual/reference/method/db.grantPrivilegesToRole/ |
grantPrivilegesToRole
команда | revokePrivilegesFromRole | ||
параметры |
|
||
обертка | db.revokePrivilegesFromRole (rolename, привилегии, writeConcern) | ||
Описание | Команда удаляет указанные привилегии из определенной пользователем роли с именем rolename, определенным в текущей базе данных. | ||
пример | В оболочке MongoDB давайте createRole команду (чтобы отозвать привилегии у роли, созданной ранее командой createRole ):
|
||
Ссылка | http://docs.mongodb.org/manual/reference/command/revokePrivilegesFromRole/
http://docs.mongodb.org/manual/reference/method/db.revokePrivilegesFromRole/ |
revokePrivilegesFromRole
команда | grantRolesToRole | ||
параметры |
|
||
обертка | db.grantRolesToRole (роль, роли, writeConcern) | ||
Описание | Команда назначает дополнительные роли пользовательской роли с именем rolename, определенным в текущей базе данных. | ||
пример | В оболочке MongoDB давайте createRole команду (чтобы назначить больше ролей роли, созданной ранее командой createRole ):
|
||
Ссылка | http://docs.mongodb.org/manual/reference/command/grantRolesToRole/
http://docs.mongodb.org/manual/reference/method/db.grantRolesToRole/ |
grantRolesToRole
команда | revokeRolesFromRole | ||
параметры |
|
||
обертка | db.revokeRolesFromRole (роль, роли, writeConcern) | ||
Описание | Команда удаляет указанные роли из определенной пользователем роли с именем rolename, определенным в текущей базе данных. | ||
пример | В оболочке MongoDB давайте createRole команду (чтобы удалить некоторые роли из роли, созданной ранее командой createRole ):
|
||
Ссылка | http://docs.mongodb.org/manual/reference/command/revokeRolesFromRole/
http://docs.mongodb.org/manual/reference/method/db.revokeRolesFromRole/ |
revokeRolesFromRole
команда | rolesInfo | ||
параметры |
|
||
обертка | db.getRole (rolename, showPrivileges)
db.getRoles () |
||
Описание | Команда возвращает информацию о наследовании и привилегиях для указанных ролей (включая как определяемые пользователем роли, так и встроенные роли). | ||
пример | В оболочке MongoDB давайте createRole команду (чтобы получить информацию о роли, созданной ранее командой createRole ): db.getRole( "testrole" )
|
||
Ссылка | http://docs.mongodb.org/manual/reference/command/rolesInfo/
http://docs.mongodb.org/manual/reference/method/db.getRole/ http://docs.mongodb.org/manual/reference/method/db.getRoles/ |
rolesInfo
команда | invalidateUserCache |
Описание | Команда немедленно удаляет информацию о пользователе из кэша в памяти, включая удаление учетных данных и ролей каждого пользователя. |
пример | В оболочке MongoDB давайте db.runCommand( { invalidateUserCache: 1 } ) команду: db.runCommand( { invalidateUserCache: 1 } )
|
Ссылка | http://docs.mongodb.org/manual/reference/command/invalidateUserCache/ |
invalidateUserCache
команда | Аутентифицировать | ||
параметры |
|
||
обертка | db.auth (имя пользователя, пароль) | ||
Описание | Команда позволяет пользователю проходить аутентификацию в базе данных из оболочки MongoDB или сеанса клиента. | ||
пример | В оболочке MongoDB давайте createUser команду (для аутентификации сеанса с использованием пользователя, ранее созданного командой createUser ): db.auth( "testuser", "testpassword" )
|
||
Ссылка | http://docs.mongodb.org/manual/reference/command/authenticate/ |
Аутентифицировать
команда | выйти |
обертка | db.logout () |
Описание | Команда завершает текущий сеанс аутентификации (если текущий сеанс не использует аутентификацию, команда не имеет никакого эффекта). |
пример | В оболочке MongoDB давайте db.logout() команду: db.logout() |
Ссылка | http://docs.mongodb.org/manual/reference/command/logout/ |
выйти
2.1. Дополнительные ресурсы
- Безопасность MongoDB, часть I: проектирование и настройка http://blog.mongodb.org/post/86408399868/mongodb-security-part-1-design-and-configuration
- Безопасность MongoDB, часть II: 10 ошибок, которые могут поставить под угрозу вашу базу данных http://blog.mongodb.org/post/87691901392/mongodb-security-part-ii-10-mistakes-that-can
3. Индексирование
Выбор правильных индексов может повысить производительность ваших запросов (и, следовательно, производительность приложений) в большинстве случаев. MongoDB поддерживает различные типы индексов для выбора:
- _id : все коллекции имеют индекс в поле _id, которое существует по умолчанию
- одиночное поле : индексы для одного поля документа, например {title>: 1}
- составной индекс : индексы для нескольких полей, например: {«title»: 1, «price»: 1}
- multikey index : индексы для контента, хранящегося в массивах, например
- геопространственный индекс : 2d / 2sphere для поддержки эффективных геопространственных запросов, например: {«location»: «2d»}
- текстовые индексы : индексы на строковом содержимом для поддержки полнотекстового поиска, например {title ”:“ text ”}
- хешированные индексы : индексы для поддержки хеширования на основе хеша (подробнее см. в части 4. Руководства по монтированию MongoDB )
Кроме того, каждый индекс может быть определен как:
- уникальные : повторяющиеся значения для индексированного поля будут отклонены
- sparse : индекс содержит записи только для документов, имеющих индексированное поле
Для индексированных коллекций значения для индексированных полей имеют максимальный предел длины ключа индекса: общий размер записи индекса должен быть не более 1024 байтов (см. Раздел официальной документации по ограничениям и порогам ).
Для получения более подробной информации об индексации, пожалуйста, обратитесь к официальной документации .
4. Профилирование
MongoDB предоставляет очень полезный инструмент для сбора данных о производительности сервера: профилировщик базы данных. Он собирает подробные данные о запросах, операциях записи, курсорах и других командах базы данных на работающем экземпляре сервера. Профилирование можно включить на уровне экземпляра для каждой базы данных или для каждого сервера.
команда | Профиль | ||
параметры |
|
||
обертка | db.setProfilingLevel (уровень, замедления) | ||
Описание | Команда изменяет текущий уровень профилировщика, используемый системой профилирования базы данных для сбора данных о производительности. Параметр level имеет следующее значение:
-1 — Без изменений. Возвращает текущий уровень профиля. 0 — выкл. Нет профилирования. 1 — вкл. Включает только медленные операции. 2 — вкл. Включает в себя все операции. |
||
пример | В оболочке MongoDB давайте db.setProfilingLevel(2) команду: db.setProfilingLevel(2) |
||
Ссылка | http://docs.mongodb.org/manual/reference/command/profile/
http://docs.mongodb.org/manual/reference/method/db.setProfilingLevel/ |
Профиль
команда | db.getProfilingLevel () |
Описание | Команда возвращает текущий уровень профилирования для операций с базой данных. |
пример | В оболочке MongoDB давайте db.getProfilingLevel() команду: db.getProfilingLevel()
|
Ссылка | http://docs.mongodb.org/manual/reference/method/db.getProfilingLevel/ |
команда | db.getProfilingStatus () |
Описание | Команда возвращает документ, который отражает текущий уровень профилирования и порог профилирования. |
пример | В оболочке MongoDB давайте db.getProfilingStatus() команду: db.getProfilingStatus() |
Ссылка | http://docs.mongodb.org/manual/reference/method/db.getProfilingStatus/ |
db.getProfilingLevel
команда | показать профиль |
Описание | Выводит пять последних операций, которые заняли 1 миллисекунду или более. |
пример | В оболочке MongoDB давайте выполним команду: show profile
Примечание. Отображается только фрагмент выходных данных. |
Ссылка | http://docs.mongodb.org/manual/reference/mongo-shell/#command-helpers |
показать профиль
Чтобы получить больше информации об анализе производительности операций с базой данных, пожалуйста, обратитесь к официальной документации .
5. Запрос кеша
Среди многих других новых функций MongoDB 2.6 поддерживает новый набор команд для просмотра и управления кешем запросов:
- перечислить все известные формы запроса
- отображать кэшированные планы для формы запроса
- удалить форму запроса из кэша
- очистить весь кеш
Оптимизатор запросов выполняет запросы и выбирает наиболее эффективный план запроса для запроса с заданными индексами. Позднее этот план запроса используется каждый раз, когда выполняется запрос (с такой формой). Оптимизатор запросов кэширует планы только для тех форм запросов, которые могут иметь более одного жизнеспособного плана, и иногда пересматривает планы запросов по мере изменения содержимого коллекции.
Чтобы поэкспериментировать с планами запросов, нам нужен небольшой набор данных, и пример из части 3. Учебник по MongoDB и Java снова пригодится. Давайте переключимся на коллекцию книг в базе данных книжного магазина , создадим пару индексов и вставим в нее несколько документов, используя оболочку MongoDB .
использовать книжный магазин
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
|
db.books.ensureIndex( { "publisher.name" : 1 } ) db.books.ensureIndex( { "publisher.name" : 1 , "price" : 1 } ) db.books.insert( { "title" : "MongoDB: The Definitive Guide" , "publisher" : { "name" : "O'Reilly" }, "price" : 32.99 } ); db.books.insert( { "title" : "MongoDB Applied Design Patterns" , "publisher" : { "name" : "O'Reilly" }, "price" : 32.99 } ); db.books.insert( { "title" : "MongoDB in Action, 2nd Edition" , "publisher" : { "name" : "Manning" }, "price" : 26.66 } ); |
Как только подготовка будет завершена, давайте запустим простой запрос, который запустит оценку планов запросов: db.books.find( { "publisher.name": "O'Reilly" }, { "title": 1 } )
команда | дб. <коллекция> .getPlanCache (). помощь () |
Описание | Команда отображает методы, доступные для кэша плана запросов коллекции, с кратким описанием. |
пример | В оболочке MongoDB давайте db.books.getPlanCache().help() команду: db.books.getPlanCache().help()
|
Ссылка | http://docs.mongodb.org/manual/reference/method/PlanCache.help/ |
дб. <коллекция> .getPlanCache
команда | planCacheListFilters | ||
параметры |
|
||
Описание | Команда выводит список фильтров индекса, связанных с формами запроса для коллекции коллекции . | ||
пример | В оболочке MongoDB давайте planCacheSetFilter команду (чтобы planCacheSetFilter список фильтров, установленных ранее planCacheSetFilter ): db.runCommand( { planCacheListFilters: "books" } )
|
||
Ссылка | http://docs.mongodb.org/manual/reference/command/planCacheListFilters/ |
planCacheListFilters
команда | planCacheSetFilter | ||
параметры |
|
||
Описание | Команда устанавливает фильтр индекса для коллекции коллекции . Если индексный фильтр уже существует для формы запроса, он будет переопределен. | ||
пример | В оболочке MongoDB давайте выполним команду:
|
||
Ссылка | http://docs.mongodb.org/manual/reference/command/planCacheSetFilter/ |
planCacheSetFilter
команда | planCacheClearFilters | ||
параметры |
|
||
Описание | Команда очищает индексные фильтры для коллекции . | ||
пример | В оболочке MongoDB давайте выполним команду:
|
||
Ссылка | http://docs.mongodb.org/manual/reference/command/planCacheClearFilters/ |
planCacheClearFilters
команда | planCacheListQueryShapes | ||
параметры |
|
||
обертка | дб. <коллекция> .getPlanCache (). listQueryShapes () | ||
Описание | Команда отображает формы запросов, для которых существуют кэшированные планы запросов для коллекции . | ||
пример | В оболочке MongoDB давайте db.books.getPlanCache().listQueryShapes() команду: db.books.getPlanCache().listQueryShapes()
|
||
Ссылка | http://docs.mongodb.org/manual/reference/command/planCacheListQueryShapes/
http://docs.mongodb.org/manual/reference/method/PlanCache.listQueryShapes/ |
planCacheListQueryShapes
команда | planCacheListPlans | ||
параметры |
|
||
обертка | db. <collection> .getPlanCache (). getPlansByQuery (<запрос>, <проекция>, <сортировка>) | ||
Описание | Команда отображает кэшированные планы запросов для указанной формы запроса для сбора коллекции . | ||
пример | В оболочке MongoDB давайте db.books.getPlanCache().getPlansByQuery( { "publisher.name": "O'Reilly" }, { "title": 1 }, {} ) команду: db.books.getPlanCache().getPlansByQuery( { "publisher.name": "O'Reilly" }, { "title": 1 }, {} )
Примечание. Отображается только фрагмент выходных данных. |
||
Ссылка | http://docs.mongodb.org/manual/reference/command/planCacheListPlans/
http://docs.mongodb.org/manual/reference/method/PlanCache.getPlansByQuery/ |
planCacheListPlans
команда | planCacheClear | ||
параметры |
|
||
обертка | db. <collection> .getPlanCache (). clearPlansByQuery (<запрос>, <проекция>, <сортировка>)
дб. <коллекция> .getPlanCache (). Clear () |
||
Описание | Команда очищает кэшированные планы запросов для указанной формы запроса для сбора коллекции . Если форма запроса опущена, все кэшированные планы запросов будут очищены. | ||
пример | В оболочке MongoDB давайте выполним команду: db.books.getPlanCache (). Clear () | ||
Ссылка | http://docs.mongodb.org/manual/reference/command/planCacheClear/
http://docs.mongodb.org/manual/reference/method/PlanCache.clearPlansByQuery/ |
planCacheClear
Если для уровня журнала установлено значение 1 или выше, MongoDB будет регистрировать изменения в кэше плана. Уровень журнала можно установить с помощью следующей команды (обратите внимание, что он должен быть запущен в контексте базы данных администратора): db.adminCommand( { setParameter: 1, logLevel: 1 } )
6. Курсоры
Курсоры — это основной способ доступа к документам, возвращаемым операциями чтения, например, db.<collection>.find()
. В оболочке MongoDB , если возвращенный курсор не назначен переменной, то только первые 20 документов берутся из курсора и отображаются как результат. Тем не менее, курсоры очень мощные и предоставляют много полезных методов.
метод | cursor.addOption (флаг) |
Описание | Метод добавляет специальные флаги протокола проводного соединения, которые изменяют поведение запроса. |
Ссылка | http://docs.mongodb.org/manual/reference/method/cursor.addOption/ |
cursor.addOption (флаг)
метод | cursor.batchSize (размер) |
Описание | Метод указывает количество документов, возвращаемых в каждом пакете ответа от экземпляра сервера. |
Ссылка | http://docs.mongodb.org/manual/reference/method/cursor.batchSize/ |
cursor.batchSize (размер)
метод | cursor.count () |
Описание | Метод подсчитывает количество документов, на которые ссылается курсор. |
Ссылка | http://docs.mongodb.org/manual/reference/method/cursor.count/ |
cursor.count ()
метод | cursor.explain (подробно) |
Описание | Метод сообщает о плане выполнения запроса (включая использование индексов) для курсора. |
Ссылка | http://docs.mongodb.org/manual/reference/method/cursor.explain/ |
cursor.explain (подробно)
метод | cursor.forEach (функция) |
Описание | Метод перебирает курсор и применяет функцию JavaScript к каждому документу. |
Ссылка | http://docs.mongodb.org/manual/reference/method/cursor.forEach/ |
cursor.forEach (функция)
метод | cursor.hasNext () |
Описание | Метод возвращает true, если у курсора больше документов и его можно повторять. |
Ссылка | http://docs.mongodb.org/manual/reference/method/cursor.hasNext/ |
cursor.hasNext ()
метод | cursor.hint (индекс) |
Описание | Метод заставляет экземпляр сервера использовать определенный индекс для запроса. |
Ссылка | http://docs.mongodb.org/manual/reference/method/cursor.hint/ |
cursor.hint (индекс)
метод | cursor.limit (предел) |
Описание | Метод ограничивает размер результирующего набора курсора (возвращаемых документов). |
Ссылка | http://docs.mongodb.org/manual/reference/method/cursor.limit/ |
cursor.limit (предел)
метод | cursor.map (функция) |
Описание | Метод применяет функцию JavaScript к каждому документу в курсоре и собирает возвращаемые значения в массив. |
Ссылка | http://docs.mongodb.org/manual/reference/method/cursor.map/ |
cursor.map (функция)
метод | cursor.maxTimeMS (<миллисекунды>) |
Описание | Метод задает совокупный лимит времени в миллисекундах для обработки операций на курсоре. |
Ссылка | http://docs.mongodb.org/manual/reference/method/cursor.maxTimeMS/ |
cursor.maxTimeMS (<миллисекунды>)
метод | cursor.max ({field1: <max value1>, field2: <max value2>… fieldN: <max valueN>}) |
Описание | Метод определяет исключительный верхний индекс, связанный с курсором. |
Ссылка | http://docs.mongodb.org/manual/reference/method/cursor.max/ |
cursor.max
метод | cursor.min ({field1: <min value1>, field2: <min value2>… fieldN: <min valueN>}) |
Описание | Метод определяет нижнюю границу индекса для курсора. |
Ссылка | http://docs.mongodb.org/manual/reference/method/cursor.min/ |
cursor.min
метод | cursor.next () |
Описание | Метод возвращает следующий документ в курсоре. |
Ссылка | http://docs.mongodb.org/manual/reference/method/cursor.next/ |
cursor.next ()
метод | cursor.objsLeftInBatch () |
Описание | Метод возвращает количество документов, оставшихся в текущем пакете курсора. |
Ссылка | http://docs.mongodb.org/manual/reference/method/cursor.objsLeftInBatch/ |
cursor.objsLeftInBatch ()
метод | cursor.readPref (mode, tagSet) |
Описание | Метод задает предпочтение чтения для курсора, чтобы управлять тем, как клиенты направляют запросы в набор реплик . |
Ссылка | http://docs.mongodb.org/manual/reference/method/cursor.readPref/ |
cursor.readPref (mode, tagSet)
метод | cursor.showDiskLoc () |
Описание | Метод возвращает курсор с измененными документами, которые включают местоположение документа на диске в специальном свойстве $ diskLoc . |
Ссылка | http://docs.mongodb.org/manual/reference/method/cursor.showDiskLoc/ |
cursor.showDiskLoc ()
метод | cursor.size () |
Описание | Метод возвращает количество документов в курсоре после применения методов cursor.skip () и cursor.limit () . |
Ссылка | http://docs.mongodb.org/manual/reference/method/cursor.size/ |
cursor.size ()
метод | cursor.skip (номер) |
Описание | Метод возвращает курсор, который начинает возвращать результаты только после передачи или пропуска нескольких документов. Его следует вызывать перед извлечением любых документов из базы данных. |
Ссылка | http://docs.mongodb.org/manual/reference/method/cursor.skip/ |
cursor.skip (номер)
метод | cursor.snapshot () |
Описание | Этот метод гарантирует, что запрос не будет возвращать документ несколько раз, даже если промежуточные операции записи приводят к перемещению документа из-за увеличения размера документа. Он должен вызываться перед извлечением каких-либо документов из базы данных и работает только с незащищенными коллекциями. |
Ссылка | http://docs.mongodb.org/manual/reference/method/cursor.snapshot/ |
cursor.snapshot ()
метод | cursor.sort (сортировка) |
Описание | Метод возвращает результаты, упорядоченные в соответствии со спецификацией сортировки. |
Ссылка | http://docs.mongodb.org/manual/reference/method/cursor.sort/ |
cursor.sort (сортировка)
метод | cursor.toArray () |
Описание | Метод возвращает массив, содержащий все документы, возвращаемые курсором |
Ссылка | http://docs.mongodb.org/manual/reference/method/cursor.toArray/ |
cursor.toArray ()
команда | parallelCollectionScan | ||
параметры |
|
||
Описание | Команда позволяет приложениям использовать несколько параллельных курсоров при чтении всех документов из коллекции. Возвращает документ, который содержит массив информации о курсоре. | ||
пример | В оболочке MongoDB давайте выполним команду: db.runCommand ({parallelCollectionScan: «books», numCursors: 1}) | ||
Ссылка | http://docs.mongodb.org/manual/reference/command/parallelCollectionScan/ |
parallelCollectionScan
Вооружившись более глубокими знаниями о курсорах, давайте рассмотрим пример различных методов курсора в действии, используя коллекцию книг из раздела Query Cache .
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
[ { "title" : "MongoDB in Action, 2nd Edition" , "publisher" : { "name" : "Manning" }, "price" : 26.66 , "$diskLoc" : { "file" : 0 , "offset" : 17072 } }, { "title" : "MongoDB: The Definitive Guide" , "publisher" : { "name" : "O'Reilly" }, "price" : 32.99 , "$diskLoc" : { "file" : 0 , "offset" : 16560 } } ] |
7. Массовые операции
Одной из самых крутых возможностей последней версии MongoDB 2.6 является введение массового API . В двух словах, этот новый API поддерживает упорядоченные и неупорядоченные массовые операции. В упорядоченной групповой операции выполнение каждой операции следует порядку, который был добавлен к групповой операции. Следовательно, в неупорядоченной массовой операции порядок каждой операции не гарантируется.
команда | дб. <коллекция> .initializeOrderedBulkOp () |
Описание | Команда Инициализирует и возвращает новый упорядоченный построитель массовых операций для коллекции . Строитель создает упорядоченный список операций, которые должны быть выполнены массово. |
пример | В оболочке MongoDB давайте выполним команду: var bulk = db.testcollection.initializeOrderedBulkOp () |
Ссылка | http://docs.mongodb.org/manual/reference/method/db.collection.initializeOrderedBulkOp/ |
initializeOrderedBulkOp
команда | дб. <коллекция> .initializeUnorderedBulkOp () |
Описание | Команда инициализирует и возвращает новый неупорядоченный построитель массовых операций для коллекции . Построитель создает неупорядоченный список операций, которые должны быть выполнены массово. |
пример | В оболочке MongoDB давайте выполним команду:
var bulk = db.testcollection.initializeUnorderedBulkOp () |
Ссылка | http://docs.mongodb.org/manual/reference/method/db.collection.initializeUnorderedBulkOp/ |
initializeUnorderedBulkOp
Эти две команды являются отправной точкой для начала использования массового API. Они возвращают объект массового построения (типа Bulk ), который обеспечивает свободный API для создания массовых операций.
метод | Bulk.insert (<документ>) |
Описание | Метод добавляет операцию вставки в список массовых операций. |
Ссылка | http://docs.mongodb.org/manual/reference/method/Bulk.insert/ |
Bulk.insert (<документ>)
метод | Bulk.find (<запрос>) |
Описание | Метод задает условие запроса для обновления или операции удаления. Может использоваться со следующими массовыми операциями:
— Bulk.find (<запрос>). RemoveOne () — Bulk.find (<запрос>). Remove () — Bulk.find (<запрос>). ReplaceOne () — Bulk.find (<запрос>). UpdateOne () — Bulk.find (<запрос>). Update () |
Ссылка | http://docs.mongodb.org/manual/reference/method/Bulk.find/ |
Bulk.find (<запрос>)
метод | Bulk.find (<запрос>). RemoveOne () |
Описание | Метод добавляет одну операцию удаления документа в список массовых операций. |
Ссылка | http://docs.mongodb.org/manual/reference/method/Bulk.find.removeOne/ |
Bulk.find (<запрос>). RemoveOne
метод | Bulk.find (<запрос>). Удалить () |
Описание | Метод добавляет операцию удаления в список массовых операций. |
Ссылка | http://docs.mongodb.org/manual/reference/method/Bulk.find.remove/ |
Bulk.find (<запрос>). Удалить
метод | Bulk.find (<запрос>). ReplaceOne () |
Описание | Метод добавляет одну операцию замены документа в список массовых операций. |
Ссылка | http://docs.mongodb.org/manual/reference/method/Bulk.find.replaceOne/ |
Bulk.find (<запрос>). ReplaceOne
метод | Bulk.find (<запрос>). UpdateOne () |
Описание | Метод добавляет одну операцию обновления документа в список массовых операций. |
Ссылка | http://docs.mongodb.org/manual/reference/method/Bulk.find.updateOne/ |
Bulk.find (<запрос>). UpdateOne
метод | Bulk.find (<запрос>). Обновление () |
Описание | Метод добавляет операцию множественного обновления в список массовых операций. |
Ссылка | http://docs.mongodb.org/manual/reference/method/Bulk.find.update/ |
Bulk.find (<запрос>). Обновление
метод | Bulk.execute (writeConcern) |
Описание | Метод выполняет список операций, созданных сборщиком массовых операций. |
Ссылка | http://docs.mongodb.org/manual/reference/method/Bulk.execute/ |
Bulk.execute (writeConcern)
Чтобы закончить с массовым API, давайте создадим и выполним пример массовой операции, используя оболочку MongoDB и команды инициализации. В примере мы собираемся выполнить следующие действия:
- вставить 3 книги в коллекцию книг
- обновить все книги , установив поле категорий
- обновить категории книги (под названием «MongoDB: The Definition Guide» ) с дополнительной категорией
- удалить все книги, опубликованные Мэннингом
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
var bulk = db.books.initializeOrderedBulkOp(); bulk.insert( { "title" : "MongoDB: The Definitive Guide" , "publisher" : { "name" : "O'Reilly" }, "price" : 32.99 } ); bulk.insert( { "title" : "MongoDB Applied Design Patterns" , "publisher" : { "name" : "O'Reilly" }, "price" : 32.99 } ); bulk.insert( { "title" : "MongoDB in Action, 2nd Edition" , "publisher" : { "name" : "Manning" }, "price" : 26.66 } ); bulk.find( { "publisher.name" : "O'Reilly" } ) .update( { $set: { "categories" : [ "Databases" , "NoSQL" ] } } ); bulk.find( { "title" : "MongoDB: The Definitive Guide" } ) .updateOne( { $addToSet: { "categories" : "Programming" } } ); bulk.find( { "publisher.name" : "Manning" } ) .remove(); bulk.execute( { w: "majority" , wtimeout: 5000 } ); |
Как вы можете видеть, каждое действие в рамках упорядоченной массовой операции может зависеть от предыдущих действий (например, поиск / обновление зависит от вставки). Это не относится к неупорядоченным массовым операциям . Выполнение этой массовой операции в оболочке MongoDB приводит к следующему результату:
01
02
03
04
05
06
07
08
09
10
|
BulkWriteResult({ "writeErrors" : [ ], "writeConcernErrors" : [ ], "nInserted" : 3 , "nUpserted" : 0 , "nMatched" : 3 , "nModified" : 3 , "nRemoved" : 1 , "upserted" : [ ] }) |
7.1. Дополнительные ресурсы
- Новый массовый API MongoDB : http://blog.mongodb.org/post/84922794768/mongodbs-new-bulk-api
8. Что дальше
Этот раздел завершает учебник по MongoDB . Надеемся, что вы нашли эту базу данных документов NoSQL, соответствующую вашим текущим или будущим требованиям приложений, и это руководство помогло вам принять правильные решения.