【MongoDB】记录Java整合MongoDB方法和坑

MongoDB实战:Java客户端整合MongoDB、SpringBoot整合MongoDB 文章目录一、Java客户端整合MongoDB1. 引入pom依赖2. 测试代码二、SpringBoot整合MongoDB1. 引入依赖2. 配置类3. 启动类4. 实体类5. 测试类三、关于事务 一、Java客户端整合MongoDB 首先我们创建一个Maven项目。 1. 引入pom依赖 <dependencies> <dependency> <groupId>org.mongodb</groupId> <a 阅读详情

记录下最近刚操作MongoDB出现的坑

第一种方式

使用MongoTemplate操作,这个是在springboot中整合了mongodb的常见方法。

  1. 添加依赖
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
  1. application.yml添加配置
spring:
  data:
    mongodb:
      uri: mongodb://username:password@ip:port/dbname
  1. 使用方法
@Component
public class MongoTest {

    @Autowired private MongoTemplate mongoTemplate;

    public <T> List<T> findAll(Class<T> clazz) {
        //可以再加一个参数指定collection
        //return mongoTemplate.findAll(clazz, collection);
        return mongoTemplate.findAll(clazz);
    }

    public <T> T findOne(Class<T> clazz) {
        Query query = new Query(Criteria.where("id").is("xxx");
        return mongoTemplate.findOne(query, clazz);
    }

}
  1. 问题

MongoTemplate整合了大量常见的方法,基本满足了所有的使用,以上代码只是简单的示意,详情看官方文档或者专门介绍这个的书和博客。但是使用这个的时候我发现了一个天坑。问题就是在传入一个类获取结果,就是代码中的Class clazz。有一个大问题,如果MongoDB中的字段有首字母大写的,就很尴尬了。因为Java的字段是大小写敏感的,如果Java的映射类字段设置成首字母大写,和MonggoDB一致,那么findAll是没有问题的,可以正常获取到值。但是用到条件查询时,就会抛出一个映射类没有小写开头字段的异常。如果设置成小写,那么查询会获取不到结果。

  1. 解决方法

我大小写做了很多手脚,发现还是不行。没办法,只能使用第二种方式解决,就是字段的映射关系自己来写。

第二种方式

  1. 第二种方式和第一种的关系就相当于是ORM框架和jdbc的关系。上面的MongoTemplate帮忙封装了字段的映射,但是不能正常映射,所以就是用这个方法来手动指定。

  2. 使用方法

//创建Mongo对象
Mongo mongo = new Mongo(ip, port);
//连接dbname数据库,如果不存在则创建
DB myDB = mongo.getDB(dbname);

//从该数据库中获取名为coll的数据集合,如果不存在则创建collection
DBCollection collection = myDB.getCollection(coll);
//查询条件
BasicDBObject d = new BasicDBObject();
//条件查询,这个值存在就加到条件中
if (!StringUtils.isEmpty(_name))
    d.put("name", _name);
//总条目数
long count = collection.count(d);
//条件分页查询,start就是开始查询位置,(page - 1) * pageSize,limit就是页面条目数
DBCursor dbObjects = collection.find(d).skip(start).limit(limit);
dbObjects.toArray().forEach(dbObject -> {
    //处理遍历结果,这里可以传入映射类,手动取值自己映射
    ...
});

坑

  1. 对同一个条件进行大小区间的筛选

错误:

BasicDBObject d = new BasicDBObject();
d.put("update_time", new BasicDBObject("$gte", start));
d.put("update_time", new BasicDBObject("$lte", end));

这样后者会顶掉前者

正确:

BasicDBObject d = new BasicDBObject();
BasicDBObject _time = new BasicDBObject();
_time.put("$gte", start);
_time.put("$lte", end);
d.put("update_time", _time);
  1. 连接MongoDB需要账号密码
MongoCredential credential = MongoCredential.createCredential(username, dbname, password.toCharArray());
MongoClient mongoClient = new MongoClient(new ServerAddress(ip, Integer.parseInt(port)), Arrays.asList(credential));
DB database = mongoClient.getDB(dbname);//获取数据库
//从该数据库中获取名为mycollection  的数据集合,如果不存在则创建collection
DBCollection collection = database.getCollection(coll);
MongoDB-与SpringBoot整合及日志记录 1、依赖和配置 springboot项目中需要引入相关依赖: 数据库连接配置: 2、service接口及实现类 MongoTemplate是数据库和代码之间的接口,对数据库的操作都在它里面,MongoTemplate是线程安全的。 注:此处只写了一个创建方法,其他查询、删除等方法请自行脑补. SysLogService.java接口: SysLogServiceImpl.... 阅读详情

相关推荐

MongoDB实战:应用场景以及Spring和mongodb的整合

mongodb是非关系型数据库,他的存储数据可以超过上亿条(老版本的mongodb有丢数据的情况,新版本不会有,网上说的),mongodb适合存储 一些量大表关系较简单的数据,例如用户信息,用户注册信息,公司注册信息,留言,评论,操作日志,mongodb还能用分布式文件存储信息,我们主要用mongodb来存储我们项目里面的操作日志(银行的付款转账记录,角色权限的变动日志),我们主要是结合aop来使用的,首先我们来配置一个aop的切面类,再给aop的使用规则,哪个类里面的哪个方法使用当前切面类,利用后置通知类

程序媛小琬的博客 2047

mongodb设置用户密码

场景:某项目用了mongodb,然后mongodb一切都是按照默认设置,一切都好,但某日被查出安全漏洞,说mongodb要设置用户和密码什么的 解决方案:自然就是在mongodb里面设置密码,但是遇到了不少的坑,其中最大的坑就是mongodb的3.X身份验证方式,搜了很多文章都没有提到这一点,光说了如何建立用户名密码,却没有考虑到项目连接的需求,导致建立了用户,客户端可以连,怎么操作都是好的,但...

lhjllff12345的专栏 1287

Docker部署MongoDB+整合Mongo版MyBatis—Plus

SpringBoot整合MongoDB,使用了Mongo-Plus。MongoDB是一个开源的NoSQL文档型数据库,它使用灵活的文档模型来存储数据,这些文档可以是嵌套的,类似于JSON对象。MongoDB以其高性能、高可用性和易扩展性而闻名,适用于各种规模的应用,从小型项目到大型企业级应用。

阿木木AEcru的博客 2174

mongoDB 常见三种异常解析 (附配置)

配置 mongoDB配置 &lt;mongo:mongo-client id="mongoClient" host="${mongo.host}" port="${mongo.port}" credentials="${mongo.user}:${mongo.pwd}@${mongo.defaultDbName}"&gt; &lt;mongo:client-options ...

wuhulala的休息室 2万+

【Spring Boot 整合 MongoDB 完整指南】

MongoDB是一种开源的,它使用类似于JSON的BSON格式(Binary JSON)来存储数据。MongoDB使用集合(Collections)来组织文档(Documents),每个文档都是由键值对组成的。

weixin_46083369的博客 1862

既然有MySQL了,为什么还要有MongoDB?

MongoDB数据库实战系列,打造精品专栏。

学Java,找哪吒 2万+

mongoDb连接数据库配置报错Credentials need to specify username原因及解决方法

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mongo-client': Initialization of bean failed; nested exception is org.springframework.beans.TypeMismatchExceptio...

IT_townlet的博客 5309

springboot整合mongodb changestream

mongodb changestream 使用详解

congge 1万+

SpringMVC+MongoDB整合及注意事项

废话不多说 这里先带上项目的各jar包,因为版本之间的差异所爬的坑,已经数不胜数: //重要的jar都圈出来了,其他包可能与本题目无关 application.properties: #mogo mongo.host=127.0.0.1 mongo.port=27017 mongo.connectionsPerHost=8 mongo.threads

jaky0306的专栏 7872

基于FPGA的cy7c68013a双向通信实验

基于FPGA的cy7c68013a双向通信实验     本实验是基于FPGA的cy7c68013a的USB双向通信实验,以前折腾过一段时间cy7c68013a,没有入门时感觉好难,入门了就会感觉很简单。本教程主要内容:     1.cy7c68013a的固件编写,以及生成iic固件和下载固件。     2.cy7c68013a的slave模式,以及他的读写时序     3.cy7c6801...

乘风的博客 3万+

记一次完整的RPG Maker MV游戏逆向过程(思路一)

了解RPG Maker MV的文件建构 上一篇文章,我们已经成功在PC上运行了游戏,那我们如何对游戏进行逆向呢? 首先要了解正常的RPG Maker MV制作的游戏应该具有哪些文件,以及他的结构 那如何了解他的结构呢,很简单,我们只需要用RPG Maker MV创建一个默认工程,来看看一个游戏的最简结构是怎么样的 创建新项目 项目创建完成 查看项目目录结构 是不是和之前解包出来的很像呢? 通...

Ciiiiiing的博客 1万+

SpringBoot整合MongoDB JPA使用

SpringBoot整合MongoDB JPA使用

Charge8的博客 3006

ros2笔记-4.6使用launch启动脚本

ros2 4.6 使用launch启动多节点

bohu83的博客 1309

spring整合mongodb之走的最长的路---mongodb jar 包版本的套路

spring整合mongodb最长的路,是spring和mongodb版本互斥的套路!!!!!!!!!!! 一、导入依赖 我尝试了二十多种mongodb jar版本的组合, 1.要么是bean(service)无法注入, 2.要么就是mongoTemplate无法注入 3.要么就是NoSuchMethodError 4.要么就是找不到classpath下的application.xml 5.要么就...

StormEnum 1400

实现自动打包py及替换pyinstaller --add-data参数的方法

实现自动打包py及替换pyinstaller --add-data参数的方法

isS_MK_GmbH的博客 3468

tree_sitter多语言解析器配置实战指南

本文是一份详细的Tree-sitter多语言解析器配置实战指南。文章从零开始,手把手指导如何搭建Python环境、安装指定版本的tree-sitter库、下载并编译多种语言的语法规则,最终构建一个统一的解析器库。通过实战代码演示了如何初始化解析器、解析代码并遍历语法树,旨在帮助开发者高效处理多语言代码分析任务,并分享了高级技巧与常见问题排坑经验。

weixin_29245767的博客 267

java mongodb 注解_Spring和MongoDB(全注解)整合过程

最近在准备毕业论文,论文中使用到了Spring框架,考虑到数据的格式并非有固定的字段格式,因此考虑到使用MongoDB非关系型数据库存储数据。今天将Spring和MongoDB的整合过程总结如下(有坑,注意选择Spring 框架的版本)。本文章将从三个方面进行总结,分别是:在ubuntu上安装MongoDB使用Java程序测试MongoDB是否安装成功MongoDB和Spring框架进行整合(Mo...

weixin_39628063的博客 521

基于STC8G1K08A单片机的PCA捕获外部信号(100~1000HZ)程序实现

基于STC8G1K08A单片机的PCA捕获外部信号(100~1000HZ)程序实现

weixin_74013772的博客 254

【MongoDB】有了mysql和redis,为啥还用MongoDB

MongoDB 是一个基于分布式文件存储的数据库

wphero的博客 2735

Python爬虫实战:逆向解析天猫商品详情API,精准捕获规格、SKU与促销活动

及浏览器开发者工具),绕过前端渲染的复杂性,直接逆向分析并调用其内部数据接口,从而高效、稳定地抓取商品的关键信息,包括商品规格、多维度SKU信息以及复杂的促销活动。print(f"SKU ID: {sku.sku_id}, 价格: ¥{sku.price}, 库存: {sku.stock}, 规格: {sku.props}")当你访问一个商品链接时,浏览器首先会加载一个几乎为空的HTML骨架,然后通过执行大量的JavaScript代码,向后台服务器发起多个异步请求,最终将获取到的数据填充到页面中。

2201_76125261的博客 1128

Jetson AGX Orin平台Jetpack5升级Jetpack6,自研载板USB不工作问题调试

1. 问题描述将AGX Orin工业的新板放到定制的载板上当在ubuntu 22和Jetpack 6.1上使用SDKManager刷机时,lsusb为空,并且在引导时没有发现/注册xusb设备。USB C端口正常打开并供电,但似乎没有数据传输。在Ubuntu 18 Jetpack 5.1.4 SDKManager上同样刷机之后,usb C集线器在引导时被正确地发现,显示在lsusb中,并识别/挂载外部驱动器。

jzwjzw19900922的博客 1509

springboot整合Mongodb实现用户访问记录功能

Mongodb介绍 Mongodb是为快速开发互联网Web应用而构建的数据库系统,其数据模型和持久化策略就是为了构建高读/写吞吐量和高自动灾备伸缩性的系统。 Mongodb的安装和使用 下载Mongodb安装包,下载地址:https://fastdl.mongodb.org/win32/mongodb-win32-x86_64-2008plus-ssl-3.2.21-signed.msi 安装robo3t客户端 客户端程序:https://download.robomongo.org/1.2.1

曹振浩 882

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Springboot整合Mongodb

Web实现SpringBoot整合Mongodb实例

continue_gdufe的博客 2842

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

SpringBoot整合MongoDB增删改查

MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。在高负载的情况下,添加更多的节点,可以保证服务器性能。MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

qq_39594419的博客 1510

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

mall整合Mongodb实现文档操作

本文主要讲解mall整合Mongodb的过程,以实现商品浏览记录在Mongodb中的添加、删除、查询为例。项目使用框架介绍MongodbMongodb是为快速开发互联网W...

macrozheng的专栏 537
上一篇: 【Vue.js】兄弟组件之间调用对方的方法
下一篇: 【mybatis】mybatis调用sqlserver存储过程和表值函数
ColdFireMan
博客等级 码龄10年 27粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值