1、链接mongo。mysql
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]sql
mongodb:// 这是固定的格式,必需要指定。mongodb
username:password@ 可选项,若是设置,在链接数据库服务器以后,驱动都会尝试登录这个数据库数据库
host1 必须的指定至少一个host, host1 是这个URI惟一要填写的。它指定了要链接服务器的地址。若是要链接复制集,请指定多个主机地址。服务器
portX 可选的指定端口,若是不填,默认为27017数据结构
/database 若是指定username:password@,链接并验证登录指定数据库。若不指定,默认打开 test 数据库。ide
?options 是链接选项。若是不使用/database,则前面须要加上/。全部链接选项都是键值对name=value,键值对之间经过&或;(分号)隔开。spa
2、关于mongo的基础数据结构。对象
1.database 数据库(数据库)索引
和mysql同样,一个mongod 中能够有多个数据库,默认库为db,单个实例能够容纳多个独立的数据库,每个都有本身的集合和权限,不一样的数据库也放置在不一样的文件中。
(在mongodb中,系统默认还有三个具备特殊功能的库,分别是admin 【特殊权限,用户权限信息】,local【永远不会被复制的库,用来存储本地单台服务器的任意集合】,config【用于保存分片相关信息】)
2.collection 集合 (至关于table 表的概念)
集合也就是相似于关系型数据库中的表格概念,集合存在于数据库中,集合没有固定的结构,这意味着你在对集合能够插入不一样格式和类型的数据,但一般状况下咱们插入集合的数据都会有必定的关联性。
(说的再通俗一些,集合就是表,文档就是row,集合就是用来存数据的)
集合存在于数据库中,一个集合的结构能够是不固定的,也就意味着在一个集合中能够插入不一样格式不一样类型的数据,可是通常状况下,咱们插入集合的数据,都是有必定关联性的。 下面的示例就能够提现出集合的特色。
db.tmp.insert({"username":"aaa","phone_num":"13333333333"})
db.tmp.insert({"username":"bbb","phone_num":"1300000000","carr":"CMCC"})
db.tmp.insert({"username":"ccc","phone_num": ["13000000001","13333333331","15555555555"])
3.document 文档 (传统数据库中row的概念,也就是一行记录。)
文档是一组键值(key-value)对(即BSON)。MongoDB 的文档不须要设置相同的字段,而且相同的字段不须要相同的数据类型,这与关系型数据库有很大的区别。
例:{"username":"ccc","phone_num": ["13000000001","13333333331","15555555555"]
档中的键/值对是有序的,并且文档中不能存在重复的key。
4.field 数据字段/域 (column)
5.index 索引
6.primary key 主键,MongoDB自动将_id字段设置为主键
3、基础操做:
建立数据库:
use testdb; #建立一个名为testdb的数据库/切换到testdb数据库。
show dbs; #查看当前都有哪些数据库。
集合相关操做:
show collection #查看当前数据库中全部的集合。
db.tmp.insert({"username":"ccc","phone_num": ["13000000001","13333333331","15555555555"])
补充!! :在mongodb3.2 版本以后,新增了两种文档的插入方式:
db.collection.insertOne():向指定集合中插入一条文档数据
db.collection.insertMany():向指定集合中插入多条文档数据
#在db数据库中的tmp集合中插入一个文档,文档的内容是{"username":"ccc","phone_num":["13000000001","13333333331","15555555555"]
(在 MongoDB 中,你不须要建立集合。当你插入一些文档时,MongoDB 会自动建立集合。)
db.tmp.drop() #删除名为tmp的集合。
db.tmp.find() #显示出当前集合中全部的文档。
db.tmp.find({"username":"aaa"}) #查询tmp集合中username为aaa的记录。
#查询基本上都是经过find来完成的,find里面的参数就是查询条件(关于mongodb的查询,会在后面的文章中写到。)
更新相关操做:
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
query : update的查询条件,相似sql update查询内where后面的。
update : update的对象和一些更新的操做符(如$,$inc...)等,也能够理解为sql update查询内set后面的
upsert : 可选,这个参数的意思是,若是不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
multi : 可选,mongodb 默认是false,只更新找到的第一条记录,若是这个参数为true,就把按条件查出来多条记录所有更新。
writeConcern :可选,抛出异常的级别。
示例:
db.tmp.update({'username':'aaa'},{$set:{'phone_num':'010-11111111'})
#以上语句只会修改第一条发现的文档,若是你要修改多条相同的文档,则须要设置 multi 参数为 true。
db.tmp.update({'username':'aaa'},{$set:{'phone_num':'010-11111111'},{multi:true}
删除文档:
删除 status 等于 A 的所有文档:
db.inventory.deleteMany({ status : "A" })
删除 status 等于 D 的一个文档:
db.inventory.deleteOne( { status: "D" } )
须要注意的是:
remove() 方法 并不会真正释放空间。
须要继续执行 db.repairDatabase() 来回收磁盘空间。