java操作mongoDB

本文通过实战演示了MongoDB的基本操作,包括数据的增删改查等核心功能,并提供了详细的Java代码示例。
这段时间一直在研究mongoDB,由于资料很少,网上的又都是互相抄袭,真正学到的不多。官方文档对我来说又很难看懂,总之我是看的都想放弃了的。
但还好坚持了下来,现在把学习的心得记录一下。

程序员特点,没有废话,直接上代码:

public class Test2 {

@Test
public void setDBData(){
// 连接本地数据库
try {
Mongo m = new Mongo( "localhost" , 27017 );
//创建名为test_db的数据库
DB db = m.getDB("test_db");
//获取test_table中的集合(类似于获取关系数据库中的表)
Set<String> cols = db.getCollectionNames();
//创建一个叫做"test_table"的集合
DBCollection collection = db.getCollection("test_table");
for(int i=0;i<100;i++){
//基本DB对象,最终插入数据库的就是这个DB对象
BasicDBObject obj = new BasicDBObject();
obj.put("id", i);
obj.put("fid", i%30);
obj.put("uid", "name"+i%60);
obj.put("groupid", i%40);
obj.put("ip", "192.168.0."+(i+1)%40);
obj.put("regTime", new Date());
collection.insert(obj);
}
} catch (Exception e) {
e.printStackTrace();
}
}

@Test
public void getDBData(){
// 连接本地数据库
try {
Mongo m = new Mongo( "localhost" , 27017 );
//创建名为test_db的数据库
DB db = m.getDB("test_db");
//创建一个叫做"test_table"的集合
DBCollection collection = db.getCollection("test_table");
//排序 1为升序 -1为降序
DBCursor cursor=collection.find().sort(new BasicDBObject("id",-1)); //排序 1为升序 -1为降序
//DBCursor cursor=collection.find().limit(10); //只取前十个
//DBCursor cursor=collection.find().skip(10); //取前十个记录之后的
//collection.find().count() ; //总记录数
//select * from test_table where id>=10 and id<30 注:$gt=(>) $gte=(>=) $lt=(<) $lte=(<=) $ne=(!=)
//DBCursor cursor = collection.find(new BasicDBObject("id",new BasicDBObject("$lt", 30).append("$gte", 10)));
/**
//select * form table where id in (1,12,23)
int [] strs = new int[3]; //其实也可以放在List里面
strs[0] = 1;
strs[1] = 12;
strs[2] = 23;
DBCursor cursor=collection.find(new BasicDBObject("id",new BasicDBObject("$in",strs)));
*/

/**查询特定字段
DBObject query = new BasicDBObject();//要查的条件
query.put("uid", "name10");
DBObject field = new BasicDBObject();//要查的哪些字段
field.put("id", true);
field.put("fid", true);
field.put("ip", true);
DBCursor cursor=collection.find(query,field);
*/


while(cursor.hasNext()){
System.out.println(cursor.next());
}
/** select distinct("uid") from table
* 注意:distinct("uid")这个字段是什么类型,list.get(i)就是什么类型
List list=(List) collection.distinct("uid");
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
*/

/**按照groupid分组,并且分组后计算fid的sum
//select groupid ,sum(fid) fidCount form table group by groupid
//key是group by 的字段
BasicDBObject key = new BasicDBObject();
key.put("groupid", true);

//cond是where的条件 可以为空
BasicDBObject cond = new BasicDBObject();

//initial是字段sum的初始值
BasicDBObject initial = new BasicDBObject();
initial.put("fidCount", 0);

//reduce是分解归纳求和 fid的sum
String reduce = "function(obj,prev) { prev.fidCount +=obj.fid; }";

DBObject obj = collection.group(key, cond, initial, reduce);
Set set = obj.keySet();
Iterator it = set.iterator();
int i=0;
while(it.hasNext()){
String str_key = (String) it.next();
System.out.println(obj.get(str_key));
i++;
}
*/



} catch (Exception e) {
e.printStackTrace();
}
}

@Test
public void deleteTable(){
try {
Mongo m = new Mongo( "localhost" , 27017 );
//创建名为test_db的数据库
DB db = m.getDB("test_db");
//db.dropDatabase(); //删除数据库
DBCollection collection = db.getCollection("test_table");
//collection.drop(); //删除表
collection.remove(new BasicDBObject()); //清空表数据
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

@Test
public void findDataByParams(){
try {
Mongo m = new Mongo( "localhost" , 27017 );
//创建名为test_db的数据库
DB db = m.getDB("test_db");
DBCollection collection = db.getCollection("test_table");
DBObject obj = new BasicDBObject();
//select ip,groupid form table where uid=name1
obj.put("uid", "name1");
DBCursor cursor=collection.find(obj,new BasicDBObject("ip",1).append("groupid", 1));
while(cursor.hasNext()){
System.out.println(cursor.next());
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

@Test
public void updateData(){
try {
Mongo m = new Mongo( "localhost" , 27017 );
//创建名为test_db的数据库
DB db = m.getDB("test_db");
DBCollection collection = db.getCollection("test_table");
/** 以下是用findAndModify方法更改数据
DBObject obj = new BasicDBObject();
obj.put("uid", "name59");
DBObject obj2 = new BasicDBObject();
obj2.put("ip", "111.111.111.333");
//UPDATE test_table SET ip = 111.111.111.333 WHERE uid=name59;
DBObject objOld = collection.findAndModify(obj, new BasicDBObject("$set",obj2));
System.out.println("objOld==="+objOld);
//这里,findAndModify方法执行后,返回的DBObject内容还是旧的内容,但是数据库里的记录已经改为了新的记录
//如下:
DBCursor cursor= collection.find(obj);
while(cursor.hasNext()){
System.out.println("objNew=="+cursor.next());
}
*/

// 以下是用update方法更改数据 注:findOne是返回满足条件的第一个记录
// UPDATE test_table SET ip = 100.100.100.333 WHERE uid=name59;
DBObject obj = new BasicDBObject();
obj.put("uid", "name59");
DBObject obj2 = collection.findOne(obj);
obj2.put("ip", "100.100.100.333");
collection.update(obj, obj2);
System.out.println("==="+collection.findOne(obj));


} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

@Test
public void deleteData(){
try {
Mongo m = new Mongo( "localhost" , 27017 );
//创建名为test_db的数据库
DB db = m.getDB("test_db");
DBCollection collection = db.getCollection("test_table");
DBObject obj = new BasicDBObject();
obj.put("uid", "name59");
//删除数据
collection.remove(obj);
getDBData();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}


以上对mongodb的基本操作应该够用,现在还有弄不明白的就是它的模糊查询和MapReduce的用法,模糊查询只知道是用正则来实现。
以后有空再细细摸索一下吧
MATLAB代码实现了一个基于多种智能优化算法优化RBF神经网络的回归预测模型,其核心是通过智能优化算法自动寻找最优的RBF扩展参数(spread),以提升预测精度。 1.主要功能 多算法优化RBF网络:使用多种智能优化算法优化RBF神经网络的核心参数spread。 回归预测:对输入特征进行回归预测,适用于连续值输出问题。 性能对比:对比不同优化算法在训练集和测试集上的预测性能,绘制适应度曲线、预测对比图、误差指柱状图等。 2.算法步骤 数据准备:导入数据,随机打乱,划分训练集和测试集(默认7:3)。 数据归一化:使用mapminmax将输入和输出归一化到[0,1]区间。 准RBF建模:使用固定spread=100建立基准RBF模型。 智能优化循环: 调用优化算法(从指定文件夹中读取算法文件)优化spread参数。 使用优化后的spread重新训练RBF网络。 评估预测结果,保存性能指。 结果可视化: 绘制适应度曲线、训练集/测试集预测对比图。 绘制误差指(MAE、RMSE、MAPE、MBE)柱状图。 十种智能优化算法分别是: GWO:灰狼算法 HBA:蜜獾算法 IAO:改进天鹰优化算法,改进①:Tent混沌映射种群初始化,改进②:自适应权重 MFO:飞蛾扑火算法 MPA:海洋捕食者算法 NGO:北方苍鹰算法 OOA:鱼鹰优化算法 RTH:红尾鹰算法 WOA:鲸鱼算法 ZOA:斑马算法
### Java 操作 MongoDB 的基础 为了实现对MongoDB操作,在Java程序中通常会引入`mongodb-driver-sync`库。此库提供了同步驱动器,允许开发者执行基本的CRUD操作以及更复杂的查询。 #### 创建连接并获取数据库实例 建立与MongoDB服务器的连接是任何交互的第一步。这可以通过`MongoClients.create()`方法完成,该方法返回一个表示客户端连接的对象。对于本地运行的服务,默认情况下监听27017端口[^2]: ```java import com.mongodb.client.MongoClient; import com.mongodb.client.MongoClients; // 创建一个新的 MongoClient 实例用于连接默认地址 (localhost) 和端口 (27017) MongoClient mongoClient = MongoClients.create(); ``` 接着可以利用获得的客户端对象调用`getDatabase(String dbName)`函数来选定特定名称下的数据库作为工作区: ```java com.mongodb.client.MongoDatabase database = mongoClient.getDatabase("test"); ``` #### 执行 CRUD 操作 ##### 插入文档 向集合内添加新记录涉及构建BSON格式的数据结构并通过适当的方法提交给目集合。下面的例子展示了怎样往名为“users”的集合里加入一条新的用户信息[^3]: ```java import org.bson.Document; public void insertUser() { Document userDoc = new Document("name", "Alice").append("age", 30); database.getCollection("users").insertOne(userDoc); } ``` ##### 查询文档 检索已存数据同样依赖于Document类定义条件表达式,并传递至find()或findOneAndDelete()等查找接口。这里给出一段简单的代码片段用来展示如何读取所有用户的姓名列表: ```java for (Document doc : database.getCollection("users").find()) { System.out.println(doc.getString("name")); } ``` ##### 更新现有条目 当需要修改某些字段的内容时,则应该准备更新指令连同匹配模式一起交给updateMany()或者replaceOne()这样的命令处理。下述例子说明了更改年龄大于等于30岁的所有人职业为工程师的过程[^5]: ```java database.getCollection("users") .updateMany( Filters.gte("age", 30), Updates.set("job", "engineer") ); ``` ##### 删除指定项 最后如果想要移除符合条件的一条或多条记录,可借助deleteOne()或是deleteMany()来进行相应设置。比如删除名字叫Bob的所有条目的方式如下所示: ```java database.getCollection("users").deleteMany(new Document("name", "Bob")); ``` 以上就是关于使用Java语言控制MongoDB的一些基础知识和技术要点概述[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值