MongoDB入门
1 基础概念
- MongoDB与关系型数据库的对比
关系型 | MongoDB | 说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段/域 |
index | index | 索引 |
table joins | 表连接(MongoDB不支持) | |
primary key | primary key | 主键(MongoDB自动再每个集合中添加-id的主键) |
- 一个MongoDB实例可以创建多个数据库
- 一个数据库可以创建多个集合
- 一个集合可以包括多个文档
2 连接MongoDB
2.1 命令格式
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://root:123@host 连接本地用户名root,密码为123的本地数据库27017端口
mongodb://localhost,localhost:27018,localhost:27019 连接三台主从服务器,端口分别为27017,27018,27019
2.2 使用mongo.exe
2.3 java程序连接
- MongoDB详细连接教程:http://mongodb.github.io/mongo-java-driver/3.4/driver/tutorials/connect-to-mongodb/
- 添加依赖
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.4.3</version>
</dependency>
- 测试程序
@Test
public void testConnection() {
//1. 创建MongoDB客户端
MongoClient mongoClient = new MongoClient("localhost", 20717);
//采用连接字符串
//MongoClientURI connectionString = new MongoClientURI("mongodb://localhost:27017");
//MongoClient mongoClient = new MongoClient(connectionString);
//2. 连接数据库
MongoDataBase database = mongoClient.getDataBase("test");
//3. 连接collection
MongoCollection<Document> collection = database.getCollection("student");
//4. 查询第一个文档
Document myDoc = collection.find().firsr();
//5. 得到文件内容,json串
String json = myDoc.toJson();
System.out.println(json);
}
3 数据库
3.1 查询数据库
show dbs
:查询全部数据库db
:显示当前数据库
3.2 创建数据库
use DATABASE_NAME
- 如果有这个名字的数据库就切换到这个数据库,没有就创建
- <font color="red">注意:新创建的数据库不显示,需要至少包括一个集合</font>
3.3 删除数据库
先切换到这个数据库
use DATABASE_NAME
再执行删除
db.dropDatabase()
4 集合
- 集合相当于关系数据库中的表,一个数据库可以创建多个集合,一个集合是将相同类型的文档管理起来。
4.1 创建集合
先切换到要创建集合的数据库
use DATABASE_NAME
创建集合
db.createCollection(name, options)
name
:新创建的集合名options
:创建参数
4.2 删除集合
切换到数据库
use DATABASE_NAME
删除集合
db.COLLECTION_NAME.drop()
db.student.drop()
:删除名为student的集合
5 文档
5.1 插入文档
- mongodb中的文档是json格式的
- 每个文档默认以
_id
为主键,主键默认为ObjectId(对象类型),mongodb会自动生成主键值
db.student.insert({"name":"小黄","age":10});
5.2 更新文档
db.COLLECTION_NAME.update(
<query>,
<update>,
<options>
)
- query:查询条件,相当于sql中的where条件
- update:更新文档内容
- options:选项
db.student.update({"name":"小黄"},{"name":"小黄鸭","age":"18"})
- 上述命令将name是小黄的文档查询出来,并将这个文档进行更新替换
5.3 删除文档
db.COLLECTION_NAME.remove(<query>)
- query:删除条件,相当于sql中的where
5.4 查询文档
db.COLLECTION_NAME.find(query,projection)
- query:查询条件,可不填
- projection:投影查询Key,可不填
5.4.1 查询全部
db.student.find()
5.4.2 查询符合条件的记录
db.student.find({"name":"小黄"})
5.4.3 投影查询
- 只显示name和age两个key,_id主键不显示
db.student.find({"name":"小黄"},{name:1,age:1,_id:0})
6 用户
6.1 创建用户
db.createUser(
{
user:"<name>",
pwd: "<password>",
custmData:{<any information>},
roles:[{role:"<role>",db:"<database>"}]
}
)
- 例子
db.createUser(
{
user:"root",
pwd: "123",
roles:[{role:"root",db:"admin"}]
}
)
内置角色
- 数据库用户角色:read,readWrite
- 数据库管理角色:dbAdmin,dbOwner,userAdmin
- 集群管理角色:clusterAdmin,clusterManager,clusterMonitor,hostManger
- 备份恢复角色:backup,restore
- 所有数据库角色:readAnyDatabase,readWriteAnyDatabase,userAdminDatabase,dbAdminAnyDatabase
- 超级用户角色:root
6.2 认证登录
1. 在mongo.conf中设置`auth=true`
2. 重启MongoDB服务
1. 右键“此电脑”
2. 点击“管理”
3. “服务”中找到MongoDB
4. 右键—> “重新启动”
3. 使用账号密码连接数据库mongo.exe
——mongo.exe
mongo.exe -u root -p 123 --authenticationDatabase admin
- ——Studio3T
6.3 查询用户
show users
6.4 删除用户
db.dropUser("<用户名>")
6.5 修改用户
use admin
db.updateUser("test01",{roles:[role:"readWriteAnyDatabase",db:"admin"]})
- 先找到这个用户,再修改
6.6 修改密码
use admin
db.changeUserPassword("username","newPwd")