一、连接mongo。
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
mongodb:// 这是固定的格式,必须要指定。
username:password@ 可选项,如果设置,在连接数据库服务器之后,驱动都会尝试登陆这个数据库
host1 必须的指定至少一个host, host1 是这个URI唯一要填写的。它指定了要连接服务器的地址。如果要连接复制集,请指定多个主机地址。
portX 可选的指定端口,如果不填,默认为27017
/database 如果指定username:password@,连接并验证登陆指定数据库。若不指定,默认打开 test 数据库。
?options 是连接选项。如果不使用/database,则前面需要加上/。所有连接选项都是键值对name=value,键值对之间通过&或;(分号)隔开。
二、关于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字段设置为主键
三、基础操作:
创建数据库:
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() 来回收磁盘空间。