MongoDB入门

1 基础概念

  • MongoDB与关系型数据库的对比
关系型MongoDB说明
databasedatabase数据库
tablecollection数据库表/集合
rowdocument数据记录行/文档
columnfield数据字段/域
indexindex索引
table joins 表连接(MongoDB不支持)
primary keyprimary key主键(MongoDB自动再每个集合中添加-id的主键)
  1. 一个MongoDB实例可以创建多个数据库
  2. 一个数据库可以创建多个集合
  3. 一个集合可以包括多个文档

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程序连接

<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 删除数据库

  1. 先切换到这个数据库

    • use DATABASE_NAME
  2. 再执行删除

    • db.dropDatabase()

4 集合

  • 集合相当于关系数据库中的表,一个数据库可以创建多个集合,一个集合是将相同类型的文档管理起来。

4.1 创建集合

  1. 先切换到要创建集合的数据库

    • use DATABASE_NAME
  2. 创建集合

    • db.createCollection(name, options)

      • name:新创建的集合名
      • options:创建参数

4.2 删除集合

  1. 切换到数据库

    • use DATABASE_NAME
  2. 删除集合

    • 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"}]
}
)
  • 内置角色

    1. 数据库用户角色:read,readWrite
    2. 数据库管理角色:dbAdmin,dbOwner,userAdmin
    3. 集群管理角色:clusterAdmin,clusterManager,clusterMonitor,hostManger
    4. 备份恢复角色:backup,restore
    5. 所有数据库角色:readAnyDatabase,readWriteAnyDatabase,userAdminDatabase,dbAdminAnyDatabase
    6. 超级用户角色: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")
Last modification:December 27th, 2019 at 10:55 am