MongoDB 学习笔记 特点:
空间换时间
易于扩展
全文索引
SQL与NoSQL的合并,解决了SQL的效率
既有SQL的形式,又有NoSQL的自由
分片(Sharding) 将大的集合分割到不同的服务器(集群),MongoDB自动完成数据的分配,而且对应用层透明 集群
mongos 是用户与集群的交互点,用户可以把一个集群当成一台服务器
自动化,mongodb很多地方都实现了自动化,无需太多的人工干预,减少部署成本
安装部署 Mongo的安装很容易,从官网下载过来解压即可 默认数据库
admin 根数据库,主要提供用户认证,加入的用户会自动继承所有的数据库操作权限
config 分片操作时用来存储分片信息
local 该数据库中的数据永远不会被复制,可用来存储本地数据 CURD 插入:db.collectionname.insert( )
Mongo消息的最大长度是16M,注意批量插入的限制,当然也可以选择手工编译。解压的目录下有个bin目录,所有的东西都在这儿了
mongo mongo终端shell
mongod Mongo守护进程
mongos 路由器,负载均衡用
mongofiles mongo自带的文件系统GridFS的commandline管理工具
mongodump Mongo自带备份工具,类似于mysqldump 删除:`db.collectionname.remove({条件})
更新:db.collection.update({条件}, 数据)
** 批量更新是需要update的第四个参数为true
`db.posts.update({'author.name':'tes'}, {'$set':{'author.name':'new name'}})`
修改器:修改使用$set,类似的操作有:
db.posts.update({'author.name':'tes'}, {'$inc':{'author.age':'1'}})
用户的年龄+1$push
: 添加一条子记录$addSet
不存在则添加$each
一次添加多个
更新or插入 upsert 查询数据
db.collectionName.find({条件},{'显示列':1, ’不显示':0})
条件查询:
`db.collectionName.find({'age':{'$gt':19,'$lt':30}}) //查找年龄大于18小于30的
db.collection.find({'name':{'$in': ['zhangsan', 'lisi']}}) //类似于mysql的in 相反用$nin
collection.find({'$or': [ {'name': {'$in': ['zhangsan', 'lisi']}, {'age':{'$gt':18}} }]}) //查找名字为zhangsan或lisi,或年龄18以上的
$mod {'$mod': [5, 1]} 查找mod 5 余1的
$slice 查询子集切片
优化 索引 同MySQL一样,创建索引能加快查询速度
创建索引 db.test.ensureIndex({'name': 1}, {'background': true })
删除索引 dropIndexes
地理空间索引 按两个维度进行搜索,比如经纬度,更酷的是还能按其他的指定形状进行索引
db.map.find({'gps': {'$within' : {'$box': [10,20], [15,30]}}})
//建立矩形索引db.map.find({'gps': {'$within' : {'$center': [10,20], 5}}})
//圆形索引,可以用来做周边查询哦
explain Mongo也支持explain对查询性能进行判断
聚合计算 MongoDB 本身支持count,group等聚合计算,但不建议使用,使用MapReduce效果会更好,在后台生成结果集会极大提高MapReduce的效率