java操作mongoDB

这段时间一直在研究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的用法,模糊查询只知道是用正则来实现。
以后有空再细细摸索一下吧
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值