MongDB常用操作

                <svg xmlns="http://www.w3.org/2000/svg" style="display: none">
                    <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0)"></path>
                </svg>
                <h2 id="blogTitle0"><a id="MongDB_0"></a>MongDB常用操作<button class="cnblogs-toc-button" title="显示目录导航" aria-expanded="false"></button></h2> 

MongoDB 安装


  1. mac 安装

    brew search mongodb  # 查询能安装的版本
    

    brew install mongodb-community@4.2 # 安装4.2版本的mongodb

  2. ubuntu 安装

    apt-get install mongodb

配置


  1. mac 配置

    systemLog:
      destination: file
      # 日志路径
      path: /usr/local/var/log/mongodb/mongo.log
      logAppend: true
    storage:  # 存储路径
      dbPath: /usr/local/var/mongodb
    net:
      bindIp: 127.0.0.1
    
  2. ubuntu 配置

    # 存储
    storage:
      dbPath: /var/lib/mongodb
      journal:
        enabled: true
    # 日志
    systemLog:
      destination: file
      logAppend: true
      path: /var/log/mongodb/mongod.log
    

    ip 和 端口

    net:
    port: 27017
    bindIp: 127.0.0.1

    安全设置

    security:
    authorization: enabled

基本概念


  1. 在 mongodb 中通过数据库、集合、文档的方式来管理数据, 下边是 mongodb 与关系数据库的一些概念对比:

    SQL 术语 / 概念MongoDB 术语 / 概念解释 / 说明
    databasedatabase数据库
    tablecollection数据库表 / 集合
    rowdocument数据记录行 / 文档
    columnfield数据字段 / 域
    indexindex索引
    table joins表链接 (MongoDB 不支持)
    primary keyprimary key主键, MongoDB 自动在每个集合中添加 _id 的主键
  2. 一个 mongodb 实例可以创建多个数据库

  3. 一个数据库可以创建多个集合

  4. 一个集合可以包括多个文档

启动 mongodb 服务


  1. mac 启动服务

    mongod --fork -f ./mongod.conf 
    
  2. ubuntu 启动服务

    sudo mongod --fork -f ./mongod.conf 
    
  3. 访问 127.0.0.1:27017, 显示如下表示运行成功
    在这里插入图片描述

链接 mongodb


mongodb 的使用方式是客户服务器模式, 即使用一个客户端连接 mongodb 数据库 (服务端).

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:xiaoge@localhost 使用用户名root密码为xiaoge链接本地数据库27017端口
mongodb://localhost,localhost:27018,localhost:27019  链接三台主从服务器, 端口为27017、27018、27019

2、使用 mongodb 自带的 JavaScript shell (mongo) 链接
在这里插入图片描述

mac 版本的 MongoDB 安装成功, 在 /usr/local/bin 目录下有 mongo 客户端命令

ubuntu 版本的 MongoDB 安装成功, 在 /usr/bin 目录下有 mongo 客户端命令

3、使用 java 程序连接

详细参数: http://mongodb.github.io/mongo-java-driver/3.4/driver/tutorials/connect-to-mongodb/

添加依赖:

<dependency>
  <groupId>org-mongod</groupId>
  <artifactId>mongo-java-driver</artifactId>
  <version>3.4.3</version>
</dependency>

测试程序

@Test
public void testConnection() {
  // 创建 mongodb 客户端
  MongoClient mongoClient = new MongoClient("localhost", 27017);
  // 或者采用连接字符串
  // MongoClientURI connectionString = new MongoClientURI("mongodb://root:root@localhost:27017");
  // MongoClient mongoClient = new MongoClient(connectionString);
  // 连接数据库
  MongoDatabase database = mongoClient.getDatabase("test");
  // 连接 collection
  MongoCollection<Document> collection = database.getCollection("status");
  // 查询第一个文档
  Document myDoc = collection.find().first();
  // 得到文件内容 json 串
  String json = myDoc.toJson();
  System.out.println(json);
}

关闭 mongodb


  1. mac 关闭

    use admin
    db.shutdownServer();
    
  2. ubuntu 关闭

    use admin
    db.shutdownServer();
    

数据库


  1. 查询数据库

    show dbs   --查询全部数据库
    
    db  --显示当前数据库
    
  2. 创建数据库

    命令格式:

    use DATABASE_NAME
    

    例子:

    use test02

    有 test02 数据库则切换到此数据库, 没有则创建.

    注意:

    ​ 新创建的数据库不显示, 需要至少包括一个集合.

  3. 删除数据库 (慎用!!!)

    命令格式:

    db.dropDatabase()
    

    例子:

    删除 test02 数据库

    先切换数据库: use test02

集合


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

1、创建集合

db.createCollection(name, options)
name: 新创建的集合名词
options: 创建参数
列子:
db.createCollection("student")   --options可以省略

2、删除集合

db.collection.drop()
例子:
db.student.drop()   --删除student集合

文档


  1. 插入文档

    mongodb 中文档的格式是 json 格式, 下边就是一个文档, 包括两个 key: _id 主键和 name

    {
    	"_id": ObjectId("5b2cc4bfa6a44812707739b5"),
    	"name": "啸哥"
    }
    

    插入命令:

    db.COLLECTION_NAME.insert(document)
    

    每个文档默认与 _id 作为主键, 主键默认类型为 ObjectId(对象类型), mongodb 会自动生成主键值.

    例子:

    db.student.insert({"name": "啸哥", "age": 10})
    

    注意: 同一个集合中的文档的 key 可以不相同! 但是建议设置为相同的.

  2. 更新文档

    命令格式:

    db.collection.update(
    		<query>,
    		<update>,
    		<options>
    )
    

    query: 查询条件, 相当于sql语句的where
    update: 更新文档内容
    options: 选项

    1、替换文档

    将符合条件 "name":"啸哥" 的第一个文档替换为 {“name”: “啸哥 1”, “age”:10}.

    db.student.update({"name":"啸哥"}, {"name":"啸哥1", "age":10})

    2、$set 修改器

    使用 $set 修饰器指定更新的 key, key 不存在则创建, 存在则更新.

    将符合条件 "name":"啸哥" 的所有文档更新 name 和 age 值.

    db.student.update({"name":"啸哥"}, {$set:{"name":"啸哥1", "age":10}},{multi:true})

    multi: false 表示更新第一个匹配的文档, true 表示更新所有匹配的文档.

  3. 删除文档

    命令格式:

    db.student.remove(<query>)
    query: 删除条件, 相当于sql语句中的where

    1、删除所有文档

    db.student.remove({})

    2、删除符合条件的文档

    db.student.remove({"name":"啸哥"})
  4. 查询文档

    命令格式:

    db.collection.find(query, projection)
    query: 查询条件, 可不填
    projection: 投影查询key, 可不填

    1、查询全部

    db.student.find()

    2、查询符合条件的记录

    查询 name 等于 "啸哥" 的文档.

    db.student.find({"name":"啸哥"})

    3、投影查询

    只显示 name 和 age 两个 key, _id 主键不显示

    db.student.find({"name":"啸哥"},{name:1,age:1,_id:0})

用户


  1. 创建用户

    语法格式:

    mongo>db.createUser(
    	{user: "<name>",
    	 pwd: "<cleartext password>",
    	 customData: { <any infomation> },
    	 roles: [
    	 	 { role: "<role>", db: "<database>" } | "<role>",
    	 	 ....
    	 ]}
    )
    

    例子:

    创建 root 用户, 角色为 root

    use admin
    db.createUser(
    		 {
    		 		user: "root",
    		 		pwd: "123",
    		 		roles:[{role:"root",db:"admin"}]
    		 }
    )
    

    内置角色如下:

    ​ 1、数据库用户角色: read、readWrite;

    ​ 2、数据库管理角色: dbAdmin、dbOwner、userAdmin;

    ​ 3、集群管理角色: clusterAdmin、clusterManager、clusterMonitor、hostManager;

    ​ 4、备份恢复角色: backup、restore;

    ​ 5、所有数据库角色: readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase

    ​ 6、超级用户角色: root

  2. 认证登入

    为了安全需要, MongoDB 要打开认证开关, 即用户连接 MongoDB 要进行认证, 其中就可以通过账号密码方式进行认证.

    1、在 mongod.conf 中设置

    # 启用认证
    security:
     authorization: enabled
    

    2、重启 MongoDB

    3、使用账号和密码连接数据库

    1 )mongo 连接

    mongo -u root -p 123 --authenticationDatabase admin  --指定用户名-密码-认证的数据库
    

    2 )Studio 3T 连接
    在这里插入图片描述

  3. 查询用户

    查询当前库下的所有用户:

    show users
    
  4. 删除用户

    语法格式:

    db.dropUser("用户名")
    

    例子:

    删除 root1 用户

    db.dropUser(“root1”)

  5. 修改用户

    语法格式:

    db.updateUser(
    		"<username>",
    		{
    				customData: { <any information> },
    				roles : [
    						{ role: "<role>", db: "<database>" } | "<role>",
    						...
    				],
    				pwd: "<cleartext password>"
    		},
    		writeConcern: { <write concern> }
    )
    

    例子:

    先创建 test1 用户:

    use admin
    db.createUser(
    		 {
    		 		user: "test1",
    		 		pwd: "123",
    		 		roles:[{role:"root",db:"admin"}]
    		 }
    )
    

    修改 test1 用户的角色为 readWriteAnyDatabase

    use admin
    db.updateUser("test1", {roles:[{role:"readWriteAnyDatabase", db:"admin"}]})
    
  6. 修改密码

    语法格式:

    db.changeUserPassword("username","newPassword")
    

    例子:

    修改 root 用户的密码为 123

    use admin
    db.changeUserPassword("root", "123")