MongoDB数据库入门学习
安装mongodb数据库
推荐使用mongodb的客户端Studio3t,安装此客户端
mongodb的入门基础概念
与关系型数据库对比如下:
SQL术语/概念 | MongoDB术语/概念 | 解释说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段/域 |
index | index | 索引 |
table joins | 表连接(MongoDB不支持表连接) | |
primary key | primary key | 主键,MongoDB自动在每个集合中添加_id的主键 |
- 一个momgodb实例可以创建多个数据库
- 一个数据库可以创建多个集合(SQL中一个数据库可以创建多个表)
- 一个集合可以包含多个文档(SQL中一个表可以有很多列)
连接mongodb
1.使用命令连接mangodb(windows下)
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?
options]]
mongodb:// 固定前缀
username:账号,选填
password:密码,选填
host:主机名或者是ip地址,只有host主机名为必填项
port:端口,可不填,默认27017
/database:连接某一个数据库
?options:连接参数,key/value键值对
事例:
mongodb://localhost 连接本地数据库27017端口
mongodb://username:password@localhost 使用用户名为username,密码为password连接本地数据库27017端口
mongodb://localhost,localhost:27018,localhost:27019,连接单台主从服务器(集群),端口为27017,27018,27019
2.使用studio3T连接
3.使用java程序连接
添加依赖
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo‐java‐driver</artifactId>
<version>3.4.3</version>
</dependency>
编写测试程序
@Test
public void test(){
//创建客户端连接
MongoClient mongoClient = new MongoClient("localhost","27017");
//或者是采用连接字符串
//MongoClientURI connectionURI = new MongoClientURI("mongodb://root:root@localhost:27017");
//MongoClient mongoClient = new MongoClient(connectionURI);
//连接数据库
MongoDatabase database = mongoClient.getDatabase("test");
//连接colleciton
MongoCollection<Document> collection = database.getCollecton("student");
//查询第一个文档
Document document = collection.find().first();
//得到文件内容 json串儿
String json = document.toJson();
System.out.println(json);
}
数据库
(mac下需要输入mongo命令进入数据库)
1.查询数据库
show dbs 查询全部的数据库
db 查询当前的数据库
2.创建数据库(切换数据库)
有该数据库则切换,没有该数据库则创建数据库
命令格式:
use DATABASE_NAME
例子:use test02
注意:新创建的数据库不显示,需要至少包括一个集合
3.删除数据库
命令格式:
db.dropDatabase()
例:删除test02数据库
先切换数据库:use test02
再执行删除:db.dropDatabase()
集合
- 创建集合
db.createCollection(name,options)
name:新创建的集合名称
options:创建参数(可以省略)
2.删除集合
db.collection.drop()
例子:db.test.drop() 删除test集合
文档
1.插入文档
mongodb中文档的格式是json格式的文档,包括两个key:_id和name
_id:类型是ObjectId,作为文档的主键,是mongodb自己生成的对象id
插入命令:db.collection_name.insert(document);
例:
db.test.insert({“name”:“张三”,“age”:18});
2.更新文档
db.collection.update(,,)
query:相当于查询条件
update:更新文档内容
options :选项
1>替换文档:将name为小明的文档替换为{“name”:“小红”,“age”:21}
db.test.update({“name”:“小明”},{“name”:“小红”,“age”:21})
2>使用set
使用KaTeX parse error: Expected '}', got 'EOF' at end of input: …{"name":"小红"},{set:{“name”:“小黑”,“age”:12}},{multi:true})
multi:为true表示更新所有匹配的文档,为false表示更新第一条文档
3.删除文档
db.test.remove()
:删除条件,相当于sql中的where
删除所有文档:db.test.remove({});
删除指定的文档:db.test.remove({“name”:“小红”});
4.查询文档
db.collection.find(query,projection)
query:查询条件,可不填
projection:投影查询key,可不填
查询所有文档:db.test.find();
查询符合条件的文档:db.test.find({“name”:“小红”});
查询符合条件的,按照指定的field输出的文档:db.test.find({“name”:“小红”},{name:1,age:0})
1:表示需要查询出来的field
0:表示不需要查询出来的field
创建用户
为了安全起见,需要在配置文件中打开mongodb的认证开关,即使用mongodb的用户名和密码登录之后才能操作数据库需要加上以下配置
在mongo.conf的配置文件中加上auth true
重启mongodb,即需要使用账号来进行登录
使用命令行进行连接:
mongo -u username -p password authenticationDatabase admin
可以使用studio3T进行连接:
mongo>db.createUser(
{ user: “”,
pwd: “”,
customData: { },
roles: [
{ role: “”, db: “” } | “”,
… ]}
)
栗子:
use admin
db.createUser(
{
user:“root”,
pwd:“123”,
roles:[{role:“root”,db:“admin”}]
} )
内置角色如下:
- 数据库用户角色:read、readWrite;
- 数据库管理角色:dbAdmin、dbOwner、userAdmin;
- 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
- 备份恢复角色:backup、restore;
- 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、
dbAdminAnyDatabase
超级用户角色:root
查询用户
查询当前库下的所有用户:
show users
删除用户:
db.dropUser(“用户名”)
栗子:db.dropUser(“root1”)
修改用户:
db.updateUser(
“”,
{
customData : { },
roles : [
{ role: “”, db: “” } | “”,
… ],
pwd: “”
},
writeConcern: { })
栗子:修改root用户的角色为readWriteAnyDatabase
use admin
db.updateUser(“root”,{roles:[{role:“readWriteAnyDatabase”,db:“admin”}]})
修改密码:
db.changeUserPassword(“username”,“newPassword”)
栗子:修改用户名为root的密码为123
use admin
db.changeUserPassword("root:,"123’);
认证登陆
在设置了账号密码之后,需要在mongod.conf的配置文件中添加认证,即可用账号和密码进行登陆
windows:
auth = true
mac:
security:
authorization: enabled