一.Mongo的连接与断开
1.1 Mongo的连接
Mongo的连接可以使用代码连接,也可以使用shell连接.
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,键值对之间通过&或;(分号)隔开
shell连接时,默认使用mongo url即可连接.
1.2 Mongo的断开
Mongo的断开,如果使用shell,直接退出,即可断开.
二.Mongo的增删改查
2.1 database,collection的创建与删除
-
创建database
在shell下,通过
show dbs
可以查看所有的数据库,使用user xxx
就能切换到数据库,如果数据库不存在就会创建. -
删除database
在当前数据库下,使用
db.Dropdatabase()
来删除当前数据库. -
创建collection
插入数据只能往collection中插入,如果数据库中没有对应的collection,插入数据时会自动创建.也可以使用
db.xxx.createCollection()
来创建指定名字的collection. -
删除collection
在数据库下,使用
db.xxx.drop()
即可删除指定的collection. xxx即是collection的名字.
2.2 数据的增删改查
-
数据的添加
使用
db.xxx.insert({"name":"yhp"})
就可以在指定的xxx collection中插入一条记录. -
数据的删除
collection中的数据可以通过使用
db.xxx.deleteOne({条件})
来删除符合条件的一个,或者使用db.xxx.deleteMany({条件})
来删除多个符合条件的数据;老的接口也可以使用db.xxx.remove({条件})
来删除数据.如果条件为空,那么就是删除collection下的所有数据. -
数据的查询
-
查看所有数据
使用
db.xxx.find()
,即可查看所有数据. -
条件查找
- 使用
db.xxx.find({"age":{$gt:30}})
来查找age大于30的结果,也可以使用$lt,$lte
等条件.如果查找在某个区间的,则使用db.find({"age":{$gt:30, $lt:35}})
,则是找出大于30小于35的结果. - 使用
db.xxx.find({条件},{"name":1})
可以查询符合条件的结果中的指定name列.默认包含_id,如果不期望有id列,可以使用_id:0
来去掉. - 使用
db.xxx.find({条件}).sort({"name":-1})
,可以按照name倒序排序结果,如果为1,那么就为正序排序. - 使用
db.xxx.find().limit(5)
可以查看前5条数据;使用db.xxx.find().skip(10)
可以查看10条以后的数据;而如果想要查看第5条到第10条的数据呢?使用db.xxx.find().limit(10).skip(5)
- 使用
db.xxx.find({$or:[{"name":25}, {"name":30}]})
来查询满足其中一条的数据. - 使用
db.xxx.distinct("name")
可以查询去除重复后的的数据.
- 使用
-
-
数据的更新
数据的更新使用
db.xxx.update({条件},{$set:{"name":"xiaoming"}}, {multi:true})
可以更新满足条件的数据,其中multi为true时,表示更新所有符合条件的结果,而如果为false,则更新仅仅一条数据.对于新版本,则推荐使用
db.xxx.updateOne()
来更新单个结果,而使用db.xxx.updateMany()
可以更新多个结果.
三.Mongo的复制与备份
-
备份
Mongo的数据复制可以通过使用
mongodump -h 【主机名】:【端口号】 -d 【数据库名】-o 【备份的存储路径】-u 【用户名】 -p 【密码】
来备份特定的数据库,也可以通过使用mongodump -h 【主机名】:【端口号】 -d 【数据库名】-c 【集合名称】-o 【备份的存储路径】-u 【用户名】 -p 【密码】
来备份特定的集合. -
还原
可以把备份的数据重新还原到数据库中,可以使用
mongorestore -h 【主机名】:【端口号】-d 【还原成为的数据库名】-u 【用户名】 -p 【密码】 –dir 【备份目录】
来把备份中的内容还原到数据库中;也可以通过mongorestore -h 【主机名】:【端口号】-d 【还原成为的数据库名】-u 【用户名】 -p 【密码】 –dir 【备份目录的bson文件】
来把备份内容还原到指定的collection中.
四.Mongo的高级操作
-
索引
- 通过使用
db.COLLECTION_NAME.ensureIndex(keys[,options])
可以创建索引, - 通过使用
db.COLLECTION_NAME.reIndex()
重建索引 - 通过使用
db.COLLECTION_NAME.getIndexes()
查看索引 - 通过使用
db.COLLECTION_NAME.dropIndex("INDEX-NAME")
可以删除指定的索引;也可以使用db.COLLECTION_NAME.dropIndexes()
删除所有索引.
集合中索引不能超过64个
- 通过使用
-
引用式关系
MongoDB 中的关系可以是:
- 1:1 (1对1)
- 1: N (1对多)
- N: 1 (多对1)
- N: N (多对多)
假如一个用户信息中有地址字段,但是地址信息也是一个复杂的结构,那么就需要把地址信息嵌入到用户信息中,或者把地址信息的"位置"存放到用户信息中,查找的时候,先要查找到"位置"信息,然后去取其中的地址.