map型字段mongodb_MongoDB学习笔记(1)-MongoDB简
介、数据类型及帮助命令
学习笔记(1)- MongoDB简介及数据类型
本⽂所使⽤的MongoDB版本为 4.0.10
> db.();
4.0.10
⼀、MongoDB 介绍
1. MongoDB 的特点
MongoDB 是⼀个可扩展、⾼性能的 NoSQL 数据库,由 C++ 语⾔编写,旨在为 web 应⽤提供⾼性能可扩展的数据存储解决⽅案。
它的特点是⾼性能、易部署、易使⽤,存储数据⾮常⽅便,主要特性有:
模式⾃由,⽀持动态查询、完全索引,可轻易查询⽂档中内嵌的对象及数组。
⾯向集合存储,易存储对象类型的数据 , 包括⽂档内嵌对象及数组。
⾼效的数据存储 , ⽀持⼆进制数据及⼤型对象 ( 如照⽚和视频 )。
⽀持复制和故障恢复;提供了 主-从、主-主模式的数据复制及服务器之间的数据复制。
⾃动分⽚以⽀持云级别的伸缩性,⽀持⽔平的数据库集,可动态添加额外的服务器。
2. MongoDB的优点与适⽤场景
MongoDB的优点
⾼性能,速度⾮常快(如果你的内存⾜够的话)。
没有固定的表结构,不⽤为了修改表结构⽽进⾏数据迁移。
查询语⾔简单,容易上⼿。
使⽤Sharding实现⽔平扩展。
部署⽅便。
MongoDB的适⽤场景
适合作为信息基础设施的持久化缓存层 。
适合实时的插⼊,更新与查询,并具备应⽤程序实时数据存储所需的复制及⾼度伸缩性。
Mongo 的 BSON 数据格式⾮常适合⽂档化格式的存储及查询。
适合由数⼗或数百台服务器组成的数据库。因为Mongo 已经包含了对 MapReduce 引擎的内置⽀持。
⼆、SQL 与 NoSQL对⽐
-
SQL数据库
NoSQL数据库
类型
所有类型都⽀持SQL标准
存在多种类型,⽐如⽂档存储、键值存储、列数据库等
⽰例
MySQL、SQL Server、Oracle
MongoDB、HBase、Cassandra
数据存储模型
数据被存储在表的⾏和列中,其中每⼀列都有⼀个特定类型。
表通常都是按照标准化原则创建的。
使⽤联接来从多个表中检索数据。
数据模型取决于数据库类型。
⽐如数据被存储为键值对以⽤于键值存储。在基于⽂档的数据库中,数据会被存储为⽂档。NoSQL的数据模型是灵活的,与SQL数据库死板的表模型相反。
模式
mysql帮助文档
固定的结构和模式,因此对模式的任何变更都涉及修改数据库
动态模式,通过扩展或修改当前模式就能适应新的数据类型或结构。
可以动态添加新的字段
可扩展性
使⽤了纵向扩展⽅式。这意味着随着负荷的增加,需要购买更⼤、更贵的服务器来容纳数据。使⽤了横向扩展⽅式。这意味着可以将数据负荷分散到多台廉价服务器上。
⽀持事务
⽀持ACID和事务
⽀持分区和可⽤性,会损害事务。
事务存在于某个级别,⽐如数据库级别或⽂档级别。
⼀致性
强⼀致性
取决于产品。有些产品选择提供强⼀致性,⽽有些提供最终⼀致性。
查询功能
可通过易⽤的GUI界⾯来使⽤
查询可能需要编程专业技术和知识。与UI不同,其重⼼在于功能和编程接⼝
MongoDB 与 Mysql 概念对应关系
mongodb
mysql
数据库(datebase)
数据库(datebase)
集合(collection)
表(table)
⽂档(document)
记录(row)
字段
列 / 字段
索引
索引
嵌⼊和引⽤
表内联结
三、MongoDB ⽀持的数据类型
1. null
null⽤于表⽰空值或不存在的字段
{ "x" : null }
2. 布尔
布尔类型有两个值 true 和 false
{ "x": true }
3. 32位整数
在 Mongo Shell 中不⽀持这个类型。JavaScript仅⽀持64位浮点数,所以32位整数会被⾃动转换为64位浮点数。
4. 64位整数
在 Mongo Shell 中也不⽀持这个类型。Mongo Shell 会使⽤⼀个特殊的内嵌⽂档来显⽰64位整数。
5. 64位浮点数
Mongo Shell 中的数字都是这种类型。
{ "pi" : 3.14 }
JavaScript 中只有⼀种 “数字” 类型。因为 MongoDB 中有3种数字类型(32位整数、64位整数和64位浮点数), shell 必须绕过JavaScript 的限制。默认情况下,shell 中的数字都被 MongoDB 当做是双精度数。这意味着如果你从数据库中获得的是⼀个32位整数,修改⽂档后,将⽂档存回数据库的时候,这个整数也被转换成了浮点数,即便保持这个整数原封不动也会这样的。所以明智的做法是尽量不要在 shell 下覆盖整个⽂档。
数字只能表⽰为双精度数(64位浮点数)的另外⼀个问题是,有些64位的整数并不能精确地表⽰为64位浮点数。所以,如果存⼊了⼀个64位整数,在shell中查看,它会显⽰为⼀个内嵌⽂档。但是在数据库中实际存储的值是准确的。
32位的整数都能⽤64位的浮点数精确表⽰,所以显⽰起来没什么特别的。
6. 字符串
UTF-8字符串都可表⽰为字符串类型
{ "x" : "abcde" }
7. 对象id
对象id使⽤12字节的存储空间,每个字节两位⼗六进制数字,是⼀个24位的字符串。
{ "_id" : ObjectId() }
8. ⽇期
⽇期类型存储的是亳秒级的时间戳,不存储时区。
{ "d" : new Date() }
9. 正则表达式
⽂档中可以包含正则表达式,采⽤JavaScript的正则表达式语法。
{ "x" : /^abc/i }
10. 代码
⽂档中可以包含JavaScript代码
{ "x" : function(){/********/} }
11. 数组
值的集合或者列表可以表⽰成数组
{ "d" : [1,2,3,4,5] }
12. 内嵌⽂档
⽂档中可以包含其他⽂档,也可以作为值嵌⼊到⽗⽂档中。
{ "x" : { "y" : "z" } }
13. undefined
⽂档中也可以使⽤ undefined((未定义)类型(JavaScript中 null 和 undefined 是不同的类型)。{ "a" : undefined }
14. ⼆进制数据
⼆进制数据可以由任意字节的串组成。可⽤于存储图⽚等⼆进制⽂件。不过在 Mongo Shell 中⽆法使⽤。
四、Mongo Shell 帮助命令
1. 系统级帮助:help
> help
db.help() help on db 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
# 显⽰所有数据库
show dbs show database names
# 显⽰所有集合
show collections show collections in 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
dbmandHelp(name) returns the help for the command
db.currentOp() displays currently executing operations in the db
# 删除数据库
db.dropDatabase()
db.eval() - deprecated
db.fsyncLock() flush data to disk and lock server for backups
db.fsyncUnlock() unlocks server following a db.fsyncLock()

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。