MongoDB 安装教程
一、介绍
mongodb数据库是非关系数据库,mongodb中没有表的概念,数据都是存储在集合中
- 易扩展: NoSQL数据库种类繁多, 但是⼀个共同的特点都是去掉关系数据库的关系型特性。 数据之间⽆关系, 这样就⾮常容易扩展
- ⼤数据量, ⾼性能: NoSQL数据库都具有⾮常⾼的读写性能, 尤其在⼤数据量下, 同样表现优秀。 这得益于它的⽆关系性, 数据库的结构简单
- 灵活的数据模型: NoSQL⽆需事先为要存储的数据建⽴字段, 随时可以存储⾃定义的数据格式。 ⽽在关系数据库⾥, 增删字段是⼀件⾮常麻烦的事情。 如果是⾮常⼤数据量的表, 增加字段简直就是⼀个噩梦
二、数据类型
- Object ID:文档ID
- String:字符串 该属性是最常用的数据类型,并且为一个有效的UTF-8字符集
- Boolean:存储一个布尔值,true或者false
- Integer:整数 可以是32位或64位,取决于服务器
- Double:浮点值
- Arrays:数组或列表,多个值存储到一个键
- Object:用于嵌入式的文档,即一个值为一个文档
- Null:Null值
- Timestamp: 时间戳 表示1970-1-1到现在的总秒数
- Date:存储当前日期或时间的UNIX时间格式
三、登录(使用可视化工具,可忽略)
mongosh
mongosh -u 用户名 -p 密码 --port 端口号 --host ip 数据库名
mongosh ip:port/数据库 -u 用户名 -p 密码
mongosh --port=27017 --host=127.0.0.1
四、DadaBase基础命令
查看当前数据库: db
查看所有的数据库: show dbs
切换数据库,数据库不存在会创建数据库: use db_name
删除当前数据库: db.DropDatabase()
查看集合:show collections
获取集合,集合不存在则创建集合:db.getCollection(collection_name)
创建用户密码:db.createUser({
user: 'admin', // 用户名
pwd: '123456', // 密码
roles:[{
role: 'root', // 角色---超级管理员才可以使用该角色
db: 'admin' // 数据库
}]
})
显示当亲库下的用户:show users
删除用户:db.dropUser(useName) 或者 db.collection.users.remove({user:useName})
'''
用户角色:
read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限
'''
五、操作符
六、集合创建,类似mysql中的表
- db.createCollection(name, options) 创建集合:db.createCollection(‘test’)
- name: 要创建的集合名称
- options: 可选参数, 指定有关内存大小及索引的选项
- db.collection.drop() 删除集合:db.test.drop()
七、创建数据
- db.collection.insert(document | [[document], options) 若插入的数据主键已经存在,会抛异常,不保存当前数据
- document:创建的数据,格式键值对:{name:‘张三’}
- options: 可选参数
- db.collection.save(document, options) 如果 _id 主键存在则更新数据,如果不存在就插入数据
- db.collection.insertMany([document], options) 用于向集合插入一个多个文档
- db.collection.insertOne(document, options) 用于向集合插入一个新文档
八、更新数据
- db.collection.update(query,update,options) 根据query条件,更新数据为update
- query : update的查询条件,类似sql update查询内where后面的,格式键值对:{name:‘张三’}
- update : update的对象和一些更新的操作符(如 , , ,inc…)等,也可以理解为sql update查询内set后面的,格式键值对:{name:‘李四’,age:20}
- options: 可选参数
- db.collection.updateOne(query,update,options) 更新一条数据,update必须加操作符,如:{$set:{name:‘王五’}}
- db.collection.updateMany(query,update,options) 更新多条数据,update必须加操作符,如:{$set:{name:‘王五’}}
- db.collection.replaceOne(query,replaceDocument,options) 根据筛选器替换集合中的单个文档
九、删除数据
- db.collection.remove(query, options) 根据query条件,删除数据
- query : update的查询条件,类似sql update查询内where后面的,格式键值对:{name:‘张三’}
- options: 可选参数
- db.collection.deleteMany(query) 删除多条数据
- db.collection.deleteOne(query ) 删除一条数据
十、获取数据
- db.collection.find(query, projection)
- query : update的查询条件,类似sql update查询内where后面的,格式键值对:{name:‘张三’},不传查全部
- projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)
- db.collection.findOne(query, projection) 查找一条数据
- db.collection.findAndModify(document) 查找多条数据并修改
- db.collection.findOneAndDelete(query, options) 查找一条数据,并删除
- db.collection.findOneAndUpdate(query, update, options) 查找一条数据并更新,db…collection.findOneAndUpdate({name:‘test0’},{$set:{name:‘test’,age:21}})
- db.collection.findOneAndReplace(query, replaceDocument, options) 查找一条数据并替换 db.test_data.findOneAndReplace({name:‘test’},{name:‘test0’,age:21})
- db.collection.find(query, projection).limit(number) 读取指定数量的⽂档
- db.collection.find(query, projection).skip(number) 读取除number前面的全部文档
- db.collection.find(query, projection).sort(number) 排序,db.collection.sort({age: -1}):1为升序,-1为降序
- db.collection.find(query, projection).count(query) 统计数量,query可省略
- db.collection.find(query, projection).explain(‘executionStats’) 获取查询数据所花费的时间
- db.collection.aggregate({管道:{表达式}}) 聚合(aggregate)是基于数据处理的聚合管道
- db.collection.distinct(col_name,query) 数据去重
十一、索引
索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录
- db.collection.createIndex(keys, options) 创建索引
- key:为你要创建的索引字段,1 按升序创建索引、 -1按降序来创建索引,{name: 1}
- options:可选参数
2. db.collection.ensureIndex({name: 1}) 建立索引
- db.collection.getIndexes() 获取索引
- db.collection.totalIndexSize() 查看集合索引大小
- db.collection.dropIndexes() 删除集合所有索引
- dbcollection.dropIndex(‘索引名称’) 删除集合指定索引