目录
一、初始非关系性数据库
非关系型数据库NoSQL:主要用于解决海量数据存储,并发访问以及扩展而出现的。
CAD原则
在非关系型数据库中CAD原则主要是指:一致性(Consistenly)、可用性(Avalibility)、分区容错性(Drtition)
tip:关系型数据库只占CAD中的CA,在关系型数据库中是无分区容错性这一特点的,这是关系型数据库和非关系型数据库的区别。
BASE理论
BASE是为了解决关系数据库强一致性引起的问题而导致的可用性降低而提出的解决方案。
BASE是下面三个术语的缩写:基本可用(Basically Available)、软状态(Soft state)、最终一致(Eventually consistent)。
二、非关系型数据库的分类
键值存储数据库 ——Redis
文档存储数据库 —— MongoDB
列式存储数据库 —— HBase
图形存储数据库 —— Neo4j
三、运行MongoDB
搭建MongoDB的运行环境:
方法一:mongod --config "configFilePath" mongodb://localhost:27017
方法二:mongod --dbpath "dbFilePath" --logPath "mongodb.logFilePath" --logappend
注意:被 "" 包裹起来的地方换成指定的文件路径
四、MongoDB常见命令使用
常见查看命令:
show dbs 查看所有数据库
db 显示当前数据库
show collections 查看数据库中的所有集合
常见“增”命令:
db.createCollection("CollectionName") 显示创建集合
db.CollectionName.insertOne({key1:value1,key2:value2,...}) 隐式创建集合,并向集合中插入一条文档信息
db.CollectionName.insertMany({key1:value1,...},{key1:value1,...},{key1:value1,...},...) 向集合中插入多条文档
常见“查”命令:
db.CollectionName.find() 查集合中的所有信息
dbCollectionName.find().pretty() 查集合中的所有信息并格式化展示
dbCollectionName.find({key1:value1}) 条件查询
条件“与”查询:
db.CollectionName.find({key:vaule},{key2:value2},{key3:value3})
db.CollectionName.find({$and:[{key:vaule},{key2:value2},{key3:value3}]})
db.CollectionName.find({$and:{key:vaule},{key2:value2},{key3:value3}})
条件“或”查询
db.CollectionName.find({$or:[{key:vaule},{key2:value2},{key3:value3}]})
db.CollectionName.find({$or:{key:vaule},{key2:value2},{key3:value3}})
db.CollectionName.find({key:{$gt:value}}) 查询所有大于value的文档
db.CollectionName.find({key:{$in:[v1,v2,v2]}}) 包含操作符 $in 的使用
db.CollectionName.find({key:{$nin:[v1,v2]}}) 不包含操作符 $nin 的使用
db.CollectionName.find({key:$null}) 查询字段值为空的
db.CollectionName.find({key:/正则/}) 正则表达式查询
常见“改”命令:
db.CollectionName.updateOne({更新条件},{更新的内容}) db.CollectionName.updateMany({更新条件},{$set{key:value},{key:value}})
常见“删”命令:
db.CollectionName.remove({删除条件}) 按条件删除
db.CollectionName.remove() 全删除
db.CollectionName.drop() 删除集合
db.CollectionName.dropDatabase() 删除当前数据库
其他命令:
db.CollectionName.find().count() 可统计查询文档的个数
db.CollectionName.find({},{_id:0,key1:1,key2:1}) 查询时显示key,其中_id为0,其他统一为1
db.CollectionName.find().limit(n) 用于限制显示的文档条数
db.CollectionName.find().skip(n) 用于跳过n条文档,从n+1条开始显示
db.CollectionName.find().sort({key1:1,key2:-1}) key1升序,key2降序
管道操作(功能一致,但内部实现效果不同)
db.CollectionName.aggregate({$limit: n})
db.CollectionName.aggregate({$skip: n})
db.CollectionName.aggregate({$sort:{key:1}})
db.CollectionName.aggregate({$group:{"_id":"$type"}}) 对谁进行分组,必须要有"$key"
db.CollectionName.aggregate({$match:{key:"value"}}) 匹配字段key中值为value的
db.CollectionName.aggregate({$project:{_id:0,key1:value1,key2:value2}}) 显示数据
索引
_id是与系统索引,不可删除(除非把表给删除了)
相同的索引多次建立是无用的,只记录一次(但升序、降序的索引是不同的)
db.CollectionName.getIndexs() 查询索引
db.CollectionName.dropIndex("索引名") 删除索引
db.CollectionName.dropIndex({key:1}) 按照key的指定升序删除索引
db.CollectionName.dropIndexs() 删除所有索引
db.CollectionName.totalIndexSize() 查看集合索引的大小
db.CollectionName.ensureIndex({字段:升降序}) 创建索引
db.CollectionName.ensureIndex({字段:升降序},{name:"xxx"}) 指定name属性的创建索引
db.CollectionName.ensureIndex({字段:升降序},{background:true}) 在后台创建索引
db.CollectionName.createIndex({key1:1},{key2:-1}) 复合索引的创建(注意顺序,这是优化索引的关键)
db.CollectionName.createIndex({"key.value":1}) 多键索引创建,引号不可省
db.CollectionName.createIndex({文档:1},{unique:true}) 唯一索引创建