四、java对mongo数据库增删改查操作
系列导航
五、mongo备份篇 mongoexport、mongoimport 以及mongodump、mongorestore
数据库连接通用类参考:三、java连接mongo数据库
操作mongo的方法有很多种,如下是我比较习惯的写法,查询是最复杂的请大家参考。
一、mongo新增
//把json当做数据内容插入mongo库中
public int insertTrack(JSONObject jsonObject) {
int result = 0;
MongoDatabase database = MongoDbDao.getDb("testDb");
MongoCollection picContent = database.getCollection("traceTable", BasicDBObject.class);
DBObject dbObject = (DBObject) JSON.parse(jsonObject.toString());
picContent.insertOne(dbObject);
return result;
}
//批量添加
public int insertMany( ) {
int result = 0;
MongoDatabase database = MongoDbDao.getDb("testDb");
MongoCollection picContent = database.getCollection("traceTable", BasicDBObject.class);
String a ="{ \"_id\" : \"1\" , \"machineMac\" : \"FC83C6\"}";
String b = "{ \"_id\" : \"2\" , \"machineMac\" : \"F1727E\"}";
DBObject dbObjectA = (DBObject) JSON.parse(a);
DBObject dbObjectB = (DBObject) JSON.parse(a); ArrayList mongoList = new ArrayList();
mongoList.add(dbObjectA);
mongoList.add(dbObjectB); picContent.insertMany(mongoList);
mongoList.clear(); return result;
}
二、mongo删除
public int removeTrack(String trackId) {
int result = 0;
MongoDatabase database = MongoDbDao.getDb("testDb");
MongoCollection picContent = database.getCollection("traceTable", BasicDBObject.class);
//如下注意一般mongo自带的主键如右边 "_id" : ObjectId("60703e8f7b85766cd2554cf9") 字符串外层会带一个ObjectId()操作_id的时候使用new ObjectId()就可以
BasicDBObject delSql = new BasicDBObject("_id", new ObjectId(trackId));
picContent.findOneAndDelete(delSql);
return result;
}
三、mongo更新
public void updateTrack() {
MongoDatabase database = MongoDbDao.getDb("etc_data");
MongoCollection picContent = database.getCollection("new_trace", BasicDBObject.class);
BasicDBObject whereSql = new BasicDBObject("_id", new ObjectId("6124b4c72b2ea593ccdd3e60"));
BasicDBObject updateNewOneSql = new BasicDBObject("$set", new BasicDBObject("address", "11111"));
picContent.updateOne(whereSql,updateNewOneSql) ;
}
四、mongo查询
//综合的查询方法包括如何设置查询条件、返回的数据项、排序规则,返回的数据条数
private void selectTrack() { MongoDatabase database = MongoDbDao.getDb("testDb");
//ReadPreference.secondaryPreferred() 意思为在集群模式下查寻从库,
MongoCollection<BasicDBObject> collection = database.getCollection("oiltrack", BasicDBObject.class).withReadPreference(ReadPreference.secondaryPreferred()); String trackId = "123";
String idNum = "123456";
Timestamp createDateTime = getTimestamp(); //设置查询条件
BasicDBObject idCondObj = null;
BasicDBList idBasicDBList = new BasicDBList(); idBasicDBList.add(new BasicDBObject("idNum", idNum)); //相等条件
idBasicDBList.add(new BasicDBObject("trackId", new BasicDBObject("$ne", trackId)));//不相等条件
idBasicDBList.add(new BasicDBObject("createDateTime", new BasicDBObject("$gt", new Date(createDateTime.getTime() - 24 * 60 * 60 * 1000))));//时间大于使用
idBasicDBList.add(new BasicDBObject("createDateTime", new BasicDBObject("$lt", new Date(createDateTime.getTime()))));//时间小于使用
idCondObj = new BasicDBObject().append(QueryOperators.AND, idBasicDBList); //查询条件 //设置返回字段列表
BasicDBObject selectObj = new BasicDBObject("colum1", 1).append("colum2", 1).append("colum3", 1);
//设置排序字段
BasicDBObject sortObj = new BasicDBObject();
sortObj.put("dateTime", 1); List<String> trackBeanTrackIdList = new ArrayList<String>(); ArrayList<BasicDBObject> idRetList = new ArrayList<BasicDBObject>();
//limit(10)只查询前十条,不需要可以去掉
collection.find(idCondObj).projection(selectObj).sort(sortObj).limit(10).into(idRetList); for (BasicDBObject tempValue : idRetList) {
System.out.println(tempValue.getString("colum1"));
System.out.println(tempValue.getString("colum2"));
}
} //查询mongo记录中某属性字段不存在的记录
private void selectExistsTrack() { MongoDatabase database = MongoDbDao.getDb("testDb");
//ReadPreference.secondaryPreferred() 意思为在集群模式下查寻从库,
MongoCollection<BasicDBObject> collection = database.getCollection("oiltrack", BasicDBObject.class).withReadPreference(ReadPreference.secondaryPreferred()); //需要查询的字段
Map valueMap = new HashMap();
valueMap.put("_id", 1);
valueMap.put("name", 1); BasicDBObject whereObj = new BasicDBObject();
//查询记录中没有date这个属性的记录
whereObj.put("date", new BasicDBObject("$exists", false)); //batchSize(100)很重要,如果数据量特别大不加这个执行中会报错,batchSize(100)意思是每次取出100条数据,循环结束再取100条
Iterator iterator = collection.find(whereObj).batchSize(100).projection(new BasicDBObject(valueMap)).iterator();
while (iterator.hasNext()) {
BasicDBObject obj = (BasicDBObject) iterator.next();
String _id = obj.getString("_id");
System.out.println("_id:" + _id);
}
} //获取当前时间
public Timestamp getTimestamp() {
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = formatter.format(currentTime);
Timestamp timestamp = Timestamp.valueOf(dateString);
return timestamp;
}
四、java对mongo数据库增删改查操作的更多相关文章
- java连接mysql数据库增删改查操作记录
1. 连接数据库.得到数据库连接变量 注意连接数据库的时候 (1)打开DB Browser 新建一个Database Driver,注意加入Driver JARs的时候加入的包,我的是mysql-co ...
- Java连接MySQL数据库增删改查通用方法
版权声明:本文为博主原创文章,未经博主允许不得转载. Java连接MySQL数据库增删改查通用方法 运行环境:eclipse+MySQL 以前我们Java连接MySQL数据库都是一个数据库写一个类,类 ...
- Android SQLite 数据库 增删改查操作
Android SQLite 数据库 增删改查操作 转载▼ 一.使用嵌入式关系型SQLite数据库存储数据 在Android平台上,集成了一个嵌入式关系型数据库--SQLite,SQLite3支持NU ...
- (转)SQLite数据库增删改查操作
原文:http://www.cnblogs.com/linjiqin/archive/2011/05/26/2059182.html SQLite数据库增删改查操作 一.使用嵌入式关系型SQLite数 ...
- Android_SQLite数据库增删改查操作
一:什么是SQLite? 在Android平台上,集成了一个嵌入式关系型轻量级的数据库. 二:什么时候用的数据库? 有大量相似机构的数据需要存储时. 三:如何创建一个数据库? 1.创建一个Sqlite ...
- java连接mysql以及增删改查操作
java连接数据库的代码基本是固定的,步骤过程觉得繁琐些,代码记起来对我来说是闹挺.直接上代码: (温馨提醒:你的项目提前导入连接数据库的jar包才有的以下操作 ) class DBConnectio ...
- Java实现简单的增删改查操作
需求分析:通过数组 ,完成 对学生信息的 管理 (增删改查)创建1个 学生类创建1个 CRUD的类 – 学生管理类 并测试 在这个程序中我只运用了两个类进行操作 package com.hopu.de ...
- jmeter-Java-MongoDB 数据库增删改查操作
在日常测试过程中会发现有些测试数据是通过数据库来获取的,一般常用的数据比如SQL .Oracle,此类数据库jmeter有专门的插件进行使用JDBC,今天跟大家说一说关于Mongodb这个数据库jme ...
- SQLite数据库增删改查操作
一.使用嵌入式关系型SQLite数据库存储数据 在Android平台上,集成了一个嵌入式关系型数据库——SQLite,SQLite3支持NULL.INTEGER.REAL(浮点数字).TEXT(字符串 ...
- Android SQLite数据库增删改查操作
一.使用嵌入式关系型SQLite数据库存储数据 在Android平台上,集成了一个嵌入式关系型数据库——SQLite,SQLite3支持NULL.INTEGER.REAL(浮点数字). TEXT(字符 ...
随机推荐
- ML.NET 3.0 增强了深度学习和数据处理能力
.NET团队在 2023.11.28 在博客上正式发布了 ML.NET 3.0::https://devblogs.microsoft.com/dotnet/announcing-ml-net-3-0 ...
- 手把手教你搭建 Ceph+JuiceFS
Ceph 提供了对象存储,可作为存储引擎在 JuiceFS 中使用.这一组合非常适合云计算.大数据分析和机器学习等数据密集型应用场景. 在日常部署中可直接通过 Ceph RADOS 配合 JuiceF ...
- [CF1824D] LuoTianyi and the Function
题目描述 LuoTianyi gives you an array $ a $ of $ n $ integers and the index begins from $ 1 $ . Define $ ...
- 解决k8s删除pod后又重新创建了新的pod
1.问题现象 2.原因 在Kubernetes中,当你删除一个Pod时,如果该Pod是由Deployment.ReplicaSet或PodController创建的,那么这个Pod会被标记为" ...
- TCP/IP协议---三次握手和四次挥手
TCP首部的数据格式 其中, 源端口号和目的端口号各占16位,端口范围1~65535.1024以下为知名端口,1024~65535是供用户使用.源端口,目的端口,源ip,目的ip这四个值唯一确定一个T ...
- Android动态数字输入框
基础view如下: 具体的思路实现: 1:展示textview实现 2: 顶层使用透明的edittext.获取焦点/删除文字等. public class BaseVerificationCodeVi ...
- .NET 8上进行PDF合并
前言:在.NET 8中使用itext7需安装 itext7 和 itext7.bouncy-castle-fips-adapter 两个Nuget包,或者使用Aspose.PDF.PdfSharpCo ...
- 2023年最后一个工作日,当 hr总监找上我协商赔偿
今天是2023年最后一个工作日,hr 总监找上我协商赔偿一事,忆往昔三年前,公司刚融资1个亿,意气风发,博主入职即为公司巅峰,高级开发岗,14薪,各种福利,加班另算加班费,业务主要服务于众多500强集 ...
- springboot整合apollo配置中心
springboot整合apollo配置中心 springboot整合apollo配置中心官网文档说明得比较清楚,但还是有一些坑注意的. 官网文档:https://www.apolloconfig.c ...
- ChatGPT的中转站(欧派API) oupuapi,不扶墙也能上楼
开启智能生活新篇章:oupo中转站(欧派)--引领人工智能大模型的枢纽 在人工智能技术日新月异的今天,我们荣幸地向您推介oupo中转站(欧派)--这一汇聚各类顶尖人工智能大模型的平台.它不仅为技术研发 ...