Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >4.0.3的mongodb 安装和java使用

4.0.3的mongodb 安装和java使用

作者头像
ydymz
发布于 2018-11-07 06:39:47
发布于 2018-11-07 06:39:47
1.1K00
代码可运行
举报
文章被收录于专栏:lgp20151222lgp20151222
运行总次数:0
代码可运行

一 整合

由于本人的码云太多太乱了,于是决定一个一个的整合到一个springboot项目里面。

附上自己的github项目地址 https://github.com/247292980/spring-boot

附上汇总博文地址 https://cloud.tencent.com/developer/article/1333123

以整合功能

spring-boot,FusionChart,thymeleaf,vue,ShardingJdbc,mybatis-generator,微信分享授权,drools,spring-security,spring-jpa,webjars,Aspect,drools-drt,rabbitmq,zookeeper

这次就来整合下简单的mongodb 安装和java使用

二 安装

基于菜鸟 http://www.runoob.com/mongodb/mongodb-tutorial.html

1.官网安装,没什么好说的新手msi直接一路点下去,老手解压安装,那就更不用说了...

2.环境变量设置,这部很多教程不写,其实多个这玩意cmd用起来很舒服的

3.创建数据目录,data文件夹,conf文件夹,db文件夹,log文件夹

4.创建配置文件mongod.cfg和日志文件。配置文件自己修改成相应的地址

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
systemLog:
    destination: file
    path: D:\mongodb-4.0.3\data\log\mongod.log
storage:
    dbPath: D:\mongodb-4.0.3\data\db

5.安装成服务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mongod --config "D:\mongodb-4.0.3\conf\mongod.cfg" --install

6.启动服务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
net start MongoDB

ps.
net stop MongoDB 停止服务

mongod --remove 卸载服务

 三 使用

1.启动后台shell,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mongo

 第一次是这样的,他提示你要加个密码

2.选择admin数据库

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
use admin

3.创建用户

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
db.createUser( { 
user: "admin", //用户名 
pwd: "123456", //密码 
roles: [ { role: "root", db: "admin" } ] //权限
 } )

ps.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
user文档字段介绍:
    user字段,为新用户的名字;
    pwd字段,用户的密码;
    cusomData字段,为任意内容,例如可以为用户全名介绍;
    roles字段,指定用户的角色,可以用一个空数组给新用户设定空角色;

Built-In Roles(内置角色):
    1. 数据库用户角色:read、readWrite;
    2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
    3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
    4. 备份恢复角色:backup、restore;
    5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
    6. 超级用户角色:root  
    // 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
    7. 内部角色:__system

3.卸载服务,重装再启动,注意--auth

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mongod --auth --config "D:\mongodb-4.0.3\conf\mongod.cfg" --install

此时启动mongo不使用密码登录则看起来成功进入

实际

4.正确的启动

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mongo --port 27017 -u "admin" -p "123456" --authenticationDatabase "admin"

四 语法

有兴趣的建议直接菜鸟找吧,了解一下即可

五 java使用

官方api我喜欢这样的官方! http://mongodb.github.io/mongo-java-driver/3.7/javadoc/

坑点一

百度上大多数教程只给了代码,但是依然不成功,因为少导了包,导致java.lang.NoClassDefFoundError: com/mongodb/DBObject

pom.xml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongodb-driver</artifactId>
            <version>3.8.2</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.mongodb/mongodb-driver-core -->
        <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongodb-driver-core</artifactId>
            <version>3.8.2</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.mongodb/bson -->
        <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>bson</artifactId>
            <version>3.8.2</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

坑点二

哪怕你绕开的包的坑,你还会进入一个权限验证的坑,主要是因为百度上的版本太低了,需要修改一下校验的版本...而我是直接从官网高最新版本的,这个bug就修复了。但是,配置方面有些许不兼容。例如,mongodb和spring-mongodb默认的认证机制不同。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1、mongodb的认证机制有2种:SCRAM-SHA-1MONGODB-CR3.0之后版本默认为:SCRAM-SHA-12、spring-mongodb默认为:MONGODB-CR,并不支持设置认证方式;但是,最新的包已修复这个问题

网上的教程,大多太旧了,所以出现jar包太老而是mongodb太老的问题,或者相反的问题,orz....其实一句话说就是注意版本或者最简单的就是直接用最新

所以,若是你中途觉得菜鸟写的很好,难免会进坑然后又来看我的文章,这时候,我建议你从来来一次...因为,我把前面的不兼容的错修改,但并没有重点指出,因为这只是版本问题。你直接再搞个低版本基本就不会有事了。

代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class MongoDBConnect {
    public static String HOST = "127.0.0.1";
    public static String PORT = "27017";

    public static void main(String[] args) {
        try {
            System.out.println("MongoDBConnect to database begin");
            //连接到MongoDB服务 如果是远程连接可以替换“localhost”为服务器所在IP地址
            //ServerAddress()两个参数分别为 服务器地址 和 端口
            ServerAddress serverAddress = new ServerAddress("localhost", 27017);
            List<ServerAddress> addrs = new ArrayList<ServerAddress>();
            addrs.add(serverAddress);

            //MongoCredential.createScramSha1Credential()三个参数分别为 用户名 数据库名称 密码
            MongoCredential credential = MongoCredential.createScramSha1Credential("admin", "admin", "123456".toCharArray());
            List<MongoCredential> credentials = new ArrayList<MongoCredential>();
            credentials.add(credential);

            //通过连接认证获取MongoDB连接
            MongoClient mongoClient = new MongoClient(addrs, credentials);
            //连接到数据库
            MongoDatabase mongoDatabase = mongoClient.getDatabase("admin");
            System.out.println("MongoDBConnect to database successfully");

            //创建集合
//            mongoDatabase.createCollection("test");
//            System.out.println("集合创建成功");
//选择集合
            MongoCollection<Document> collection = mongoDatabase.getCollection("test");
            System.out.println("集合 test 选择成功");

            /**插入文档
             * 1. 创建文档 org.bson.Document 参数为key-value的格式
             * 2. 创建文档集合List<Document>
             * 3. 将文档集合插入数据库集合中 mongoCollection.insertMany(List<Document>) 插入单个文档可以用 mongoCollection.insertOne(Document)
             * */
            Document document = new Document("title", "MongoDB").
                    append("description", "database").
                    append("likes", 100).
                    append("by", "Fly");
            List<Document> documents = new ArrayList<Document>();
            documents.add(document);
            collection.insertMany(documents);
            System.out.println("文档插入成功");


            /**检索所有文档
             * 1. 获取迭代器FindIterable<Document>
             * 2. 获取游标MongoCursor<Document>
             * 3. 通过游标遍历检索出的文档集合
             * */
            FindIterable<Document> findIterable = collection.find();
            MongoCursor<Document> mongoCursor = findIterable.iterator();
            while (mongoCursor.hasNext()) {
                System.out.println(mongoCursor.next());
            }
            System.out.println("检索所有文档成功");

//更新文档   将文档中likes=100的文档修改为likes=200
            collection.updateMany(Filters.eq("likes", 100), new Document("$set", new Document("likes", 200)));
            //检索查看结果
            findIterable = collection.find();
            mongoCursor = findIterable.iterator();
            while (mongoCursor.hasNext()) {
                System.out.println(mongoCursor.next());
            }
            System.out.println("更新文档成功");

            //删除符合条件的第一个文档
            collection.deleteOne(Filters.eq("likes", 200));
            //删除所有符合条件的文档
            collection.deleteMany(Filters.eq("likes", 200));
            //检索查看结果
            findIterable = collection.find();
            mongoCursor = findIterable.iterator();
            while (mongoCursor.hasNext()) {
                System.out.println(mongoCursor.next());
            }
            System.out.println("删除文档成功");

        } catch (Exception e) {
            System.err.println(e.getClass().getName() + ": " + e.getMessage());
        }
    }
}

六 总结

关于mongodb,redis,mysql 简要对比,其实这篇文章写得很好,我给个结论就行了

https://www.cnblogs.com/lovychen/p/5613986.html

mongodb:

它是一个内存数据库,操作的数据都是放在内存里面的。

但实际数据存在硬盘中,mmap的方式可以说是索引在内存中。

持久化方式:

mongodb的所有数据实际上是存放在硬盘的,所有要操作的数据通过mmap的方式映射到内存某个区域内。mongodb就在这块区域里面进行数据修改,避免了零碎的硬盘操作。

至于mmap上的内容flush到硬盘就是操作系统的事情了,所以如果mongodb在内存中修改了数据后,mmap数据flush到硬盘之前,系统宕机了,数据就会丢失。

redis:

它就是一个不折不扣的内存数据库了。

持久化方式:

redis所有数据都是放在内存中的,持久化是使用RDB方式或者aof方式。

mysql:

无论数据还是索引都存放在硬盘中。到要使用的时候才交换到内存中。能够处理远超过内存总量的数据。

数据量和性能:

当物理内存够用的时候,redis>mongodb>mysql

当物理内存不够用的时候,redis和mongodb都会使用虚拟内存。mysql>mongodb>redis

redis要开始虚拟内存,那很明显要么加内存条,要么你换个数据库了。

mongodb不一样,只要,业务上能保证,冷热数据的读写比,使得热数据在物理内存中,mmap的交换较少。mongodb还是能够保证性能。有人使用mongodb存储了上T的数据。

mysql根本就不需要担心数据量跟内存下的关系。不过,内存的量跟热数据的关系会极大地影响性能表现。

总结就是

虚拟内存不够是 选择mongodb和mysql

虚拟内存够是 选择mongodb和redis

但实际上,更多公司选择redis和mysql,这就是技术栈的问题,毕竟nosql的定义和开发设计没几个程序员了解

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-10-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MongoDB教程(九):java集成mongoDB
💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快!
用户11147438
2024/07/20
1640
用Java操作Mongodb实现CRUD
本篇博客,为大家带来在IDEA上通过Java代码实现Mongodb的CRUD操作!
大数据梦想家
2021/01/27
1.2K0
用Java操作Mongodb实现CRUD
Java操作MongoDB
之前我们介绍的MongoDB的操作都是在shell命令中写的,在项目开发时我们当然都是用程序去操作MongoDB的,本文我们来看看如何用Java代码操作MongoDB。 ---- 准备工作 首先我们需要驱动,MongoDB的Java驱动我们可以直接在Maven中央仓库去下载,也可以创建Maven工程添加如下依赖: <dependency> <groupId>org.mongodb</groupId> <artifactId>mongodb-driver</artifactId> <v
江南一点雨
2018/04/02
1.1K0
MongoDB Java
MongoDB Java 环境配置 在 Java 程序中如果要使用 MongoDB,你需要确保已经安装了 Java 环境及 MongoDB JDBC 驱动。 本章节实例时候 Mongo 3.x 以上版
用户1220053
2018/02/09
1K0
MongoDB Java
Java连接MnogoDb数据库
添加:mongo-java-driver-3.2.2.jar   驱动地址:http://central.maven.org/maven2/org/mongodb/mongo-java-driver/
黄林晴
2019/01/10
1.3K0
Java连接各种数据库操作(mysql、oracle、postgresql、gbase、mongo)
鲲志说
2025/04/07
910
扫描器架构分析之redis+分布式+mongodb
Redis的的是完全开源免费的,遵守BSD协议,是一个高性能的键值数据库。是当前最热门的的的NoSql数据库之一,也被人们称为数据结构服务器,,因为值(value)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。
字节脉搏实验室
2020/04/16
6920
数据实时同步之MongoDB
随着传统企业的发展,企业数据呈现多样化,海量化,难以实现数据快速分析。MongoDB是当前很多企业使用的,当日积月累数据很大时,就可能会忽略历史数据的价值,可以把数据实时同步到其他储存:HBASE、HIVE、HDFS文件等等。在当前大数据、云计算的时代潮流下,实现数据价值,对企业决策力、洞察发现力极其有益。
yuanyi928
2020/07/14
2.9K0
Java使用MongoDB数据库
除了通过启动 MongoDB进程进如 Shell 环境访问数据库外,MongoDB 还提供了其他基于编程语言的访问数据库方法。
码客说
2023/07/24
4360
分布式文件存储的数据库MongoDB教程整理
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。 MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。 MongoDB 官网地址:https://www.mongodb.com/ MongoDB 官方英文文档:https://docs.mongodb.com/manual/ MongoDB 各平台下载地址:https://www.mongodb.com/download-center#community
SmileNicky
2019/01/17
2.3K0
java开发实战(3):springboot多模块整合mongo数据库(mongodb-driver)
相对于mongoTemplate,使用数据库驱动连接数据库,可以进行很多底层操作,且目前其性能也不输mongoTemplate; 此次使用这个方法整合数据库;
JQ实验室
2022/05/10
1K0
Java操作MongoDB
mongodb-driver是mongo官方推出的java连接mongoDB的驱动包,相当于JDBC驱动。 我们通过一个入门的案例来了解mongodb-driver的基本使用
名字是乱打的
2022/05/13
7210
MongoDB:在 Java 中使用 MongoDB
除了通过启动 mongo 进程进如 Shell 环境访问数据库外,MongoDB 还提供了其他基于编程语言的访问数据库方法。MongoDB 官方提供了 Java 语言的驱动包,利用这些驱动包可使用多种编程方法来连接并操作 MongoDB 数据库。
栗筝i
2023/01/06
1.6K0
MongoDB 入门,我是花了心思的
有时候不得不感慨一下,系统升级真的是好处多多,不仅让我有机会重构了之前的烂代码,也满足了我积极好学的虚荣心。你看,Redis 入门了、Elasticsearch 入门了,这次又要入门 MongoDB,感觉自己变秃的同时,也变强大了。
沉默王二
2020/06/09
7720
mongodb-driver使用
mongodb-driver是mongo官方推出的java连接mongoDB的驱动包,相当于JDBC驱动。我们现在来使用mongodb-driver完成对Mongodb的操作。
JavaEdge
2020/05/27
8530
Java Python访问MongoDB
顾翔
2024/09/10
1190
Java Python访问MongoDB
Java访问MongoDB
顾翔
2024/10/08
1370
Java访问MongoDB
JAVA单例MongoDB工具类
JAVA驱动版本: <!-- MongoDB驱动 --> <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>3.0.2</version> </dependency> 工具类代码如下: package utils; import java.util.A
用户7705674
2021/09/22
9500
mongodb必会知识点
8.2 架构 在数据承载节点中,一个且只有一个成员被视为主节点,而其他节点则被视为辅助节点。节点接收所有 写入操作,一个副本集只能有一个主实例能够写入,主节点记录所有变更到它的记录 辅助节点复制主节点的 oplog 并将操作应用于数据集。 仲裁员不维护数据集,仲裁器的目的是通过响应其 他副本集成员的心跳和选择请求来维护副本集中的仲裁。 因为它们不存储数据集,所以仲裁器是提供副本集仲裁功能的一种好方法。 与具有数据集的完全功能副本集成员相比,仲裁器的资源成本更低,如果副本集的成员数为偶数,则添 加一个仲裁器以在初选中获得多数票。 当一个主服务器在超过配置的周期(默认为 10 秒)内未与该组的其他成员通信时,符合条件的辅助服 务器将要求选择将其自身指定为新的主服务器。集群试图完成新的初选并恢复正常操作。 8.3 搭建步骤 (1) 准备三台虚拟机服务器,并各自安装好 mongoDB 注:为了保证复制集中三个服务器之间正常连接,请保证三个服务器的防火墙都已关闭! 192.168.132:27017 192.168.133:27017 192.168.134:27017 (2) 修改 mongodb.conf 文件,添加 replSet 配置 ( 三台都需要修改成同一个名称 ) ,然后启动服务器 replSet=rep1 (3) 初始化复制集 登录任意一台执行初始化操作 说明 : _id 指复制集名称, members 指复制集服务器列表,数组中的 _id 是服务器唯一的 id,host 服务器主 机 ip # 复制集名称 rs.initiate({_id:'rep1',members:[{_id:1,host:'192.168.197.132:27017'}, {_id:2,host:'192.168.197.133:27017'},{_id:3,host:'192.168.197.134:27017'}]}) (4) 查看集群状态 (5) 测试 # 添加数据 db.users.insert({"name":"lisi","age":11}) # 查询数据 db.users.find() # 切换到从数据库查询数据 如果不允许查询,是因为默认情况下从数据库是不允许读写操作的,需要设置。 >rs.slaveOK() 执行该命令后可以查询数据 (6) 测试复制集主从节点故障转移功能 # 关闭主数据库 , 注意从数据库的变 >db.shutdownServer() (7) 主复制集添加仲裁者 (arbiter) 现在我们的环境是一主两从,仲裁者对偶数集群有效。需要停止一个从机,在主服务器中运行下面命令 在一主一从关系中,任意节点宕机都无法选举出主节点,无法提供写操作,此时需要加入仲裁者节点即 可。 rs.remove("ip: 端口号 ") // 删除从节点 在一主一从关系中,任意节点宕机都无法选举出主节点,无法提供写操作,此时需要加入仲裁者节点即 可。 rs.addArb("ip: 端口号 ")
编程张无忌
2021/01/26
1.4K0
mongodb必会知识点
继续造轮子-MongoDB写日志
MongoDB我们都知道是一个Nosql,其次MongoDB可以存储海量数据,正好满足我们的需求,日志本身就会很多,基本每一个操作可能都会保存一条日志记录,如果选用mysql或者oracle的话成本感觉相对较高,而MongoDB会存在少量数据丢失的情况,当然我们用来保存日志,少几条操作也没关系?是吧!
用户7386338
2020/05/29
4730
相关推荐
MongoDB教程(九):java集成mongoDB
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验