Рубрики
Uncategorized

Примечания по обучению MongoDB (1) – Введение в MongoDB, типы данных и команды справки

Автор оригинала: David Wong.

Примечания по обучению MongoDB (1) – Введение в MongoDB и типы данных

Версия MongoDB, используемая в этой статье, – 4.0.10

> db.version();
4.0.10

Введение в MongoDB

1. Характеристики MongoDB

MongoDB-это масштабируемая и высокопроизводительная база данных NOSQL, написанная на языке C++. Она направлена на обеспечение высокопроизводительного масштабируемого решения для хранения данных для веб-приложений. Он характеризуется высокой производительностью, простотой развертывания, простотой использования и удобным хранением данных.

  • Свободный режим, поддержка динамического запроса, полный индекс, позволяет легко запрашивать встроенные объекты и массивы в документах.
  • Хранилище, ориентированное на сбор, позволяет легко хранить данные объектного типа, включая встроенные в документ объекты и массивы.
  • Эффективное хранение данных, поддержка двоичных данных и больших объектов (таких как фотографии и видео).
  • Поддерживает репликацию и восстановление после сбоев; обеспечивает репликацию данных между режимами master-slave и master-master, а также репликацию данных между серверами.
  • Автоматическая фрагментация поддерживает масштабируемость на уровне облака, поддерживает горизонтальные кластеры баз данных и динамически добавляет дополнительные серверы.

2. Преимущества и применимые сценарии MongoDB

Преимущества MongoDB

  • Высокая производительность, очень быстрая (если у вас достаточно памяти).
  • Фиксированной структуры таблиц не существует, и для изменения структуры таблиц не требуется перенос данных.
  • Язык запросов прост и удобен в использовании.
  • Используйте общий доступ для достижения горизонтального масштабирования.
  • Его легко развернуть.

Применимые сценарии mongodb

  • Постоянный слой кэша, подходящий для использования в качестве информационной инфраструктуры.
  • Он подходит для вставки, обновления и запроса в режиме реального времени, а также обладает репликацией и высокой масштабируемостью, необходимыми для хранения данных приложений в режиме реального времени.
  • Формат данных Mongo BSON очень подходит для хранения и запроса формата документа.
  • Подходит для базы данных, состоящей из десятков или сотен серверов. Потому что Mongo уже включает встроенную поддержку движка MapReduce.

Сравнение SQL и NoSQL

тип Все типы поддерживают стандарт SQL Существует множество типов, таких как хранилище документов, хранилище значений ключей, база данных столбцов и т.д.
Пример MySQL,SQL Server,Oracle MongoDB,HBase,Кассандра
Модель Хранения Данных Данные хранятся в строках и столбцах таблицы, каждая из которых имеет определенный тип. Таблицы обычно создаются в соответствии с принципами стандартизации. Используйте объединения для извлечения данных из нескольких таблиц. Модель данных зависит от типа базы данных. Например, данные хранятся в виде пар ключ-значение для хранения ключ-значение. В базе данных на основе документов данные хранятся в виде документов. Модель данных Nosql является гибкой, в отличие от жесткой табличной модели базы данных SQL.
Шаблон Фиксированная структура и схема, поэтому любое изменение схемы включает в себя изменение базы данных Динамические схемы могут адаптироваться к новым типам или структурам данных путем расширения или изменения текущей схемы. Новые поля могут быть добавлены динамически
Расширяемость Используется вертикальное расширение. Это означает, что по мере увеличения нагрузки вам необходимо покупать более крупные и дорогие серверы для размещения данных. Используется горизонтальное расширение. Это означает, что загрузка данных может быть распределена по нескольким недорогим серверам.
Транзакция поддержки Поддержка ACID и транзакций Поддержка разделения и доступности может поставить под угрозу транзакции. Транзакции существуют на уровне, таком как уровень базы данных или уровень документа.
Единообразие Сильная консистенция Это зависит от продукта. Некоторые варианты продуктов обеспечивают прочную согласованность, в то время как другие обеспечивают окончательную согласованность.
Функция запроса Его можно использовать с помощью простого в использовании графического интерфейса Запросы могут потребовать опыта и знаний в области программирования. В отличие от пользовательского интерфейса, он сосредоточен на функциях и программных интерфейсах.

Соответствие между концепциями MongoDB и Mysql

База данных База данных
Стол Коллекция
Ряд Документ
Столбец / поле поле
Индексы Индексы
Подключение к таблице Встраивание и ссылка

3. Типы данных, поддерживаемые MongoDB

1. ноль

Значение Null используется для представления пустых или несуществующих полей

{ "x" : null }

2. Логическое

Логические типы имеют два значения true и false

{ "x": true }

3. 32-разрядные целые числа

Этот тип не поддерживается в оболочке Mono. JavaScript поддерживает только 64-разрядные числа с плавающей запятой, поэтому 32-разрядные целые числа автоматически преобразуются в 64-разрядные числа с плавающей запятой.

4. 64-разрядные целые числа

Этот тип не поддерживается в оболочке Mono. Оболочка Mongo использует специальный встроенный документ для отображения 64-разрядных целых чисел.

5. 64-разрядное число с плавающей запятой

Числа в оболочке Mongo относятся к этому типу.

{  "pi" : 3.14 }

В JavaScript есть только один тип “число”. Поскольку в MongoDB существует три числовых типа (32-разрядные целые числа, 64-разрядные целые числа и 64-разрядные числа с плавающей запятой), оболочка должна обходить ограничения JavaScript. По умолчанию числа в оболочке обрабатываются MongoDB как числа с двойной точностью. Это означает, что если вы получаете 32-разрядное целое число из базы данных, то при изменении документа и сохранении его обратно в базу данных целое число также преобразуется в число с плавающей запятой, даже если вы сохраняете целое число нетронутым. Поэтому разумно постараться не закрывать весь документ под оболочкой.

Другая проблема заключается в том, что некоторые 64-разрядные целые числа не являются в точности 64-разрядными числами с плавающей запятой. Таким образом, если вы сохраните 64-разрядное целое число и просмотрите его в оболочке, оно будет отображаться как встроенный документ. Но значения, фактически сохраненные в базе данных, являются точными.

32-разрядные целые числа могут быть точно представлены 64-разрядными числами с плавающей запятой, поэтому в них нет ничего особенного.

6. строка

Строки UTF-8 могут быть представлены в виде строковых типов

{ "x" : "abcde" }

7. идентификатор объекта

Идентификатор объекта использует 12 байтов места для хранения, две шестнадцатеричные цифры на байт, 24-разрядную строку.

{ "_id" : ObjectId() }

8. дата

Типы данных хранят метки времени в Bos, а не в часовых поясах.

{ "d" : new Date() }

9. Регулярные выражения

Документы могут содержать регулярные выражения, использующие синтаксис регулярных выражений Javascript.

{ "x" : /^abc/i }

10. код

Документы могут содержать код JavaScript

{ "x" : function(){/********/} }

11. массив

Коллекция или список значений могут быть представлены в виде массива

{ "d" : [1,2,3,4,5] }

12. Встроенные Документы

Документы могут содержать другие документы или они могут быть встроены в качестве значений в родительский документ.

{ "x" : { "y" : "z" } }

13. не определено

Вы также можете использовать неопределенные ((неопределенные) типы в документах (null и undefined-это разные типы в JavaScript).

{ "a" : undefined }

14. Двоичные данные

Двоичные данные могут состоять из строк произвольных байтов. Его можно использовать для хранения двоичных файлов, таких как изображения. Но он недоступен в моно-оболочке.

IV. Заказ справки по оболочке Mongo

1. Справка на системном уровне:справка

> help
        db.help()                    help on db methods
        db.mycoll.help()             help on collection methods
        sh.help()                    sharding helpers
        rs.help()                    replica set helpers
        help admin                   administrative help
        help connect                 connecting to a db help
        help keys                    key shortcuts
        help misc                    misc things to know
        help mr                      mapreduce

        # Display all databases
        show dbs                     show database names
        # Display all collections
        show collections             show collections in current database
        # Display all users of the current database
        show users                   show users in current database
        show profile                 show most recent system.profile entries with time >= 1ms
        show logs                    show the accessible logger names
        show log [name]              prints out the last segment of log in memory, 'global' is default
        use                 set current database
        db.foo.find()                list objects in collection foo
        db.foo.find( { a : 1 } )     list objects in foo where a == 1
        it                           result of the last line evaluated; use to further iterate
        DBQuery.shellBatchSize = x   set default number of items to display on shell
        exit                         quit the mongo shell

2. Просмотрите операции, доступные в базе данных:db.help()

> db.help()
DB methods:
        db.adminCommand(nameOrDocument) - switches to 'admin' db, and runs command [just calls db.runCommand(...)]
        db.aggregate([pipeline], {options}) - performs a collectionless aggregation on this database; returns a cursor
        db.auth(username, password)
        db.cloneDatabase(fromhost) - deprecated
        db.commandHelp(name) returns the help for the command
        db.copyDatabase(fromdb, todb, fromhost) - deprecated
        db.createCollection(name, {size: ..., capped: ..., max: ...})
        db.createView(name, viewOn, [{$operator: {...}}, ...], {viewOptions})
        db.createUser(userDocument)
        db.currentOp() displays currently executing operations in the db
        # Delete the database
        db.dropDatabase()
        db.eval() - deprecated
        db.fsyncLock() flush data to disk and lock server for backups
        db.fsyncUnlock() unlocks server following a db.fsyncLock()
        db.getCollection(cname) same as db['cname'] or db.cname
        db.getCollectionInfos([filter]) - returns a list that contains the names and options of the db's collections
        # View all collections in the current database
        db.getCollectionNames()
        db.getLastError() - just returns the err msg string
        db.getLastErrorObj() - return full status object
        db.getLogComponents()
        db.getMongo() get the server connection object
        db.getMongo().setSlaveOk() allow queries on a replication slave server
        db.getName()
        db.getPrevError()
        db.getProfilingLevel() - deprecated
        db.getProfilingStatus() - returns if profiling is on and slow threshold
        db.getReplicationInfo()
        db.getSiblingDB(name) get the db at the same server as this one
        db.getWriteConcern() - returns the write concern used for any operations on this db, inherited from server object if set
        db.hostInfo() get details about the server's host
        db.isMaster() check replica primary status
        db.killOp(opid) kills the current operation in the db
        db.listCommands() lists all the db commands
        db.loadServerScripts() loads all the scripts in db.system.js
        db.logout()
        db.printCollectionStats()
        db.printReplicationInfo()
        db.printShardingStatus()
        db.printSlaveReplicationInfo()
        db.dropUser(username)
        db.repairDatabase()
        db.resetError()
        db.runCommand(cmdObj) run a database command.  if cmdObj is a string, turns it into {cmdObj: 1}
        db.serverStatus()
        db.setLogLevel(level,)
        db.setProfilingLevel(level,slowms) 0=off 1=slow 2=all
        db.setWriteConcern() - sets the write concern for writes to the db
        db.unsetWriteConcern() - unsets the write concern for writes to the db
        db.setVerboseShell(flag) display extra information in shell output
        db.shutdownServer()
        db.stats()
        db.version() current version of the server

3. Просмотрите операции, доступные в коллекции:Бд. Имя коллекции. помогите ()

> db.user.help()
DBCollection help
        db.user.find().help() - show DBCursor help
        db.user.bulkWrite( operations,  ) - bulk execute write operations, optional parameters are: w, wtimeout, j
        # Number of records in a collection
        db.user.count( query = {},  ) - count the number of documents that matches the query, optional parameters are: limit, skip, hint, maxTimeMS
        db.user.countDocuments( query = {},  ) - count the number of documents that matches the query, optional parameters are: limit, skip, hint, maxTimeMS
        db.user.estimatedDocumentCount(  ) - estimate the document count using collection metadata, optional parameters are: maxTimeMS
        db.user.copyTo(newColl) - duplicates collection by copying all documents to newColl; no indexes are copied.
        db.user.convertToCapped(maxBytes) - calls {convertToCapped:'user', size:maxBytes}} command
        db.user.createIndex(keypattern[,options])
        db.user.createIndexes([keypatterns], )
        # Collection size
        db.user.dataSize()
        db.user.deleteOne( filter,  ) - delete first matching document, optional parameters are: w, wtimeout, j
        db.user.deleteMany( filter,  ) - delete all matching documents, optional parameters are: w, wtimeout, j
        db.user.distinct( key, query,  ) - e.g. db.user.distinct( 'x' ), optional parameters are: maxTimeMS
        # Delete collections
        db.user.drop() drop the collection
        db.user.dropIndex(index) - e.g. db.user.dropIndex( "indexName" ) or db.user.dropIndex( { "indexKey" : 1 } )
        # Delete collections内的所有索引
        db.user.dropIndexes()
        db.user.ensureIndex(keypattern[,options]) - DEPRECATED, use createIndex() instead
        db.user.explain().help() - show explain help
        db.user.reIndex()
        db.user.find([query],[fields]) - query is an optional query filter. fields is optional set of fields to return.
                                                      e.g. db.user.find( {x:77} , {name:1, x:1} )
        db.user.find(...).count()
        db.user.find(...).limit(n)
        db.user.find(...).skip(n)
        db.user.find(...).sort(...)
        db.user.findOne([query], [fields], [options], [readConcern])
        db.user.findOneAndDelete( filter,  ) - delete first matching document, optional parameters are: projection, sort, maxTimeMS
        db.user.findOneAndReplace( filter, replacement,  ) - replace first matching document, optional parameters are: projection, sort, maxTimeMS, upsert, returnNewDocument
        db.user.findOneAndUpdate( filter, update,  ) - update first matching document, optional parameters are: projection, sort, maxTimeMS, upsert, returnNewDocument
        db.user.getDB() get DB object associated with collection
        db.user.getPlanCache() get query plan cache associated with collection
        db.user.getIndexes()
        db.user.group( { key : ..., initial: ..., reduce : ...[, cond: ...] } )
        db.user.insert(obj)
        db.user.insertOne( obj,  ) - insert a document, optional parameters are: w, wtimeout, j
        db.user.insertMany( [objects],  ) - insert multiple documents, optional parameters are: w, wtimeout, j
        db.user.mapReduce( mapFunction , reduceFunction ,  )
        db.user.aggregate( [pipeline],  ) - performs an aggregation on a collection; returns a cursor
        db.user.remove(query)
        db.user.replaceOne( filter, replacement,  ) - replace the first matching document, optional parameters are: upsert, w, wtimeout, j
        db.user.renameCollection( newName ,  ) renames the collection.
        db.user.runCommand( name ,  ) runs a db command with the given name where the first param is the collection name
        db.user.save(obj)
        db.user.stats({scale: N, indexDetails: true/false, indexDetailsKey: , indexDetailsName: })
        db.user.storageSize() - includes free space allocated to this collection
        db.user.totalIndexSize() - size in bytes of all the indexes
        db.user.totalSize() - storage allocated for all data and indexes
        db.user.update( query, object[, upsert_bool, multi_bool] ) - instead of two flags, you can pass an object with fields: upsert, multi
        db.user.updateOne( filter, update,  ) - update the first matching document, optional parameters are: upsert, w, wtimeout, j
        db.user.updateMany( filter, update,  ) - update all matching documents, optional parameters are: upsert, w, wtimeout, j
        db.user.validate(  ) - SLOW
        db.user.getShardVersion() - only for use with sharding
        db.user.getShardDistribution() - prints statistics about data distribution in the cluster
        db.user.getSplitKeysForChunks(  ) - calculates split points over all chunks and returns splitter function
        db.user.getWriteConcern() - returns the write concern used for any operations on this collection, inherited from server/db if set
        db.user.setWriteConcern(  ) - sets the write concern for writes to the collection
        db.user.unsetWriteConcern(  ) - unsets the write concern for writes to the collection
        db.user.latencyStats() - display operation latency histograms for this collection