Loading...
墨滴

冷芝士鸭

2021/10/12  阅读:25  主题:默认主题

mongodb入门之——mongodb的安装及简单的使用步骤

mongodb 入门之——mongodb 的安装及简单的使用步骤

1、解压安装

  • 到自定义目录
  • 修改配置文件
dbpath=D:\APP\mongodb\data      # 修改到解压路径
logpath=D:\APP\mongodb\log\mongodb.log     # 修改到解压路径
logappend=true
journal=false
quiet=true
port=27017

2、启动服务

  • 普通的启动服务,无需密码即可直接进去数据库进行操作。危险,不推荐

    mongod.exe -f d:\APP\mongodb\mongodb.conf
  • 以登录方式启动,进去数据库前需要进行登录验证,较安全,推荐

    mongod.exe -f d:\APP\mongodb\mongodb.conf --auth

    用密码登录,建议重新打开一个 cmd 窗口

    mongo -uroot
image-20211008092550177
image-20211008092550177

3、 将其注册为服务

原因:将数据库注册为服务后就不用每次访问数据库前使用命令行启动数据库服务

操作:以管理员身份运行 cmd,进入 mongodb 的 bin 目录下,输入以下指令

  • mongod  --config  d:\app\mongodb\mongodb.conf --install
  • 此时打开任务管理器可以看到已经有了 mongodb 的服务,但是显示已停止,右键启动也不能启动

  • 继续在 cmd 里输入下面命令即可开启服务

    net start MongoDB
  • 卸载服务可以使用如下命令

    net  stop  MongoDB
    mongod  --remove
    sc  delete  MongoDB
  • 可能会出现的问题

    1. mongodb\logs\mongodb.log 文件不存在而导致的错误,手动在相应目录创建即可
    2. 输入完注册服务的命令后没有反应,以管理员身份运行 cmd 即可

4、 创建新用户

打开 Robo 3T 建立连接

  • 第一次需要以不登录的方式打开,先添加用户

    image-20211008104002333
  • 第二次步骤如下:

    1. 向系统的 admin 数据库添加用户,root 表示所有权限都有
    • 先在 Robo3 里选择 admin 数据库,运行以下代码创建 root 用户

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

      成功后会显示
      Successfully added user: {
       "user" : "root",
       "roles" : [
        {
         "role" : "root",
         "db" : "admin"
        }
       ]
      }
    • 以登录方式重启服务(先关闭之前的服务:Ctrl + Z)

    • 启动后建立新的连接,或者编辑之前的连接

      image-20211008231308473 image-20211008103947529
  1. 向自己的数据库添加用户

    1. 注意选择对用的数据库进行添加用户,否则后期使用可能出现

      Command failed with error 18 (AuthenticationFailed): 'Authentication failed.' on server activate.navicat.com:27017. The full response is {"ok"0.0"errmsg""Authentication failed.""code"18"codeName""AuthenticationFailed"}
    2. 向自己的数据库中添加新用户,输入用户名密码后选择相应的权限即可

      image-20211008230419832

5、进行测试

5.1 创建数据库,名字随意

  1. 右键数据库里的 Collections 选择新建,输入数据库名

    image-20211008232622874
    image-20211008232622874
  2. 双击集合即可进行代码编写

    image-20211009082949614
    image-20211009082949614
  3. 代码如下:

    db.demo.insert({    name:"张三,    password: '123',    age: 18,    gender: '男',    address: '中国北部'})
  1. 此时的集合中文档如下:image-20211008232705236

  2. 再多插入几条数据用于后续测试:

    db.demo.insert(    {        'student':{            name:'小明',            age:'12',            class:'一年级三班'        },        'address''亚洲大陆',        'nums':[1,2,3,4] },    {     'data''some message',     'moto''thinking twice, coding once'    })

    此时集合中文档数据如下:image-20211008233622884

5.2 创建一个 Java 程序进行测试

  1. 在 IDEA 中创建一个 java 项目,使用 maven 管理依赖

  2. 添加依赖

     <dependencies>     <!-- 单元测试依赖 -->    <dependency>      <groupId>junit</groupId>      <artifactId>junit</artifactId>      <version>4.11</version>      <scope>test</scope>    </dependency>    <!-- mongodb依赖 -->    <dependency>      <groupId>org.mongodb</groupId>      <artifactId>mongodb-driver</artifactId>      <version>3.12.7</version>    </dependency>         <!-- hutool工具类依赖 -->    <dependency>      <groupId>cn.hutool</groupId>      <artifactId>hutool-all</artifactId>      <version>5.7.13</version>    </dependency>  </dependencies>
  3. 编写配置文件,在 ClassPath(或者 src/main/resources)的 config 目录下下新建 mongo.setting

    #每个主机答应的连接数(每个主机的连接池大小),当连接池被用光时,会被阻塞住 ,默以为10 --intconnectionsPerHost=100#线程队列数,它以connectionsPerHost值相乘的结果就是线程队列最大值。如果连接线程排满了队列就会抛出“Out of semaphores to get db”错误 --intthreadsAllowedToBlockForConnectionMultiplier=10#被阻塞线程从连接池获取连接的最长等待时间(ms) --intmaxWaitTime = 120000#在建立(打开)套接字连接时的超时时间(ms),默以为0(无穷) --intconnectTimeout=0#套接字超时时间;该值会被传递给Socket.setSoTimeout(int)。默以为0(无穷) --intsocketTimeout=0#是否打开长连接. defaults to false --booleansocketKeepAlive=false#---------------------------------- MongoDB实例连接,改成自己的即可[master]host = 127.0.0.1:27017database = movieuser = demopass= 123456
  4. 编写测试代码

    package org.example;import cn.hutool.db.nosql.mongo.MongoFactory;import com.mongodb.client.FindIterable;import com.mongodb.client.MongoCollection;import com.mongodb.client.MongoDatabase;import org.bson.Document;import java.util.function.Consumer;public class App {    public static void main(String[] args) {        MongoDatabase mongoDatabase = MongoFactory.getDS("master").getDb("movie");        MongoCollection<Document> gener = mongoDatabase.getCollection("demo");        FindIterable<Document> documents = gener.find();        documents.forEach((Consumer<? super Document>)document -> {            System.out.println(document.getString("message"));        });    }}
  5. 程序输出结果

    十月 082021 11:44:19 下午 com.mongodb.diagnostics.logging.JULLogger log信息: Cluster description not yet available. Waiting for 30000 ms before timing out十月 082021 11:44:19 下午 com.mongodb.diagnostics.logging.JULLogger log信息: Opened connection [connectionId{localValue:1, serverValue:58}] to activate.navicat.com:27017十月 082021 11:44:19 下午 com.mongodb.diagnostics.logging.JULLogger log信息: Monitor thread successfully connected to server with description ServerDescription{address=activate.navicat.com:27017, type=STANDALONE, state=CONNECTED, ok=true, version=ServerVersion{versionList=[4217]}, minWireVersion=0, maxWireVersion=8, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=30, roundTripTimeNanos=3559800}十月 082021 11:44:20 下午 com.mongodb.diagnostics.logging.JULLogger log信息: Opened connection [connectionId{localValue:2, serverValue:59}] to activate.navicat.com:27017null亚洲大陆Process finished with exit code 0

冷芝士鸭

2021/10/12  阅读:25  主题:默认主题

作者介绍

冷芝士鸭