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

1、解压安装

mongodb和Robo3t.zip 免安装版

  • 下载并解压到自定义目录
  • 修改mongodb的配置文件
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

mongodb安装目录 mongodb安装和使用_Database

3、 将其注册为服务

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

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

mongod  --config  d:\app\mongodb\mongodb.conf --install
  • 此时打开任务管理器可以看到已经有了mongodb的服务,但是显示已停止,右键启动也不能启动
  • 继续在cmd里输入下面命令即可开启服务
net start MongoDB

mongodb安装目录 mongodb安装和使用_mongodb安装目录_02

  • 卸载服务可以使用如下命令
net  stop  MongoDB
mongod  --remove
sc  delete  MongoDB

可能会出现的问题

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

4、 创建新用户

打开 Robo 3T 建立连接,下载地址:


mongodb安装目录 mongodb安装和使用_mongodb_03

  • 第一次需要以不登录的方式打开,先添加用户
  • 第二次步骤如下:
  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)
  • 启动后建立新的连接,或者编辑之前的连接

mongodb安装目录 mongodb安装和使用_mongodb_04


mongodb安装目录 mongodb安装和使用_数据库_05

  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"}
  1. 向自己的数据库中添加新用户,输入用户名密码后选择相应的权限即可

5、进行测试

5.1 创建数据库,名字随意

  1. 右键数据库里的Collections 选择新建,输入数据库名
  2. 双击集合即可进行代码编写
  3. 代码如下:
db.demo.insert({
    name:"张三,
    password: '123',
    age: 18,
    gender: '男',
    address: '中国北部'
})
  1. 此时的集合中文档如下:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-btQgBztT-1633738996634)(image-20211008232705236.png)]
  2. 再多插入几条数据用于后续测试:
db.demo.insert(
    {
        'student':{
            name:'小明',
            age:'12',
            class:'一年级三班'
        },
        'address': '亚洲大陆',
        'nums':[1,2,3,4]
	},
    {
    	'data': 'some message',
    	'moto': 'thinking twice, coding once'
    }
)

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

mongodb安装目录 mongodb安装和使用_数据库_06

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>
  1. 编写配置文件,在ClassPath(或者src/main/resources)的config目录下下新建mongo.setting
#每个主机答应的连接数(每个主机的连接池大小),当连接池被用光时,会被阻塞住 ,默以为10 --int
connectionsPerHost=100
#线程队列数,它以connectionsPerHost值相乘的结果就是线程队列最大值。如果连接线程排满了队列就会抛出“Out of semaphores to get db”错误 --int
threadsAllowedToBlockForConnectionMultiplier=10
#被阻塞线程从连接池获取连接的最长等待时间(ms) --int
maxWaitTime = 120000
#在建立(打开)套接字连接时的超时时间(ms),默以为0(无穷) --int
connectTimeout=0
#套接字超时时间;该值会被传递给Socket.setSoTimeout(int)。默以为0(无穷) --int
socketTimeout=0
#是否打开长连接. defaults to false --boolean
socketKeepAlive=false

#---------------------------------- MongoDB实例连接,改成自己的即可
[master]
host = 127.0.0.1:27017
database = movie
user = demo
pass= 123456
  1. 编写测试代码
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"));
        });
    }
}
  1. 程序输出结果
十月 08, 2021 11:44:19 下午 com.mongodb.diagnostics.logging.JULLogger log
信息: Cluster description not yet available. Waiting for 30000 ms before timing out
十月 08, 2021 11:44:19 下午 com.mongodb.diagnostics.logging.JULLogger log
信息: Opened connection [connectionId{localValue:1, serverValue:58}] to activate.navicat.com:27017
十月 08, 2021 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=[4, 2, 17]}, minWireVersion=0, maxWireVersion=8, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=30, roundTripTimeNanos=3559800}
十月 08, 2021 11:44:20 下午 com.mongodb.diagnostics.logging.JULLogger log
信息: Opened connection [connectionId{localValue:2, serverValue:59}] to activate.navicat.com:27017
null
亚洲大陆

Process finished with exit code 0