Mongodb
2015-09-26 13:12
387 查看
*要在MongoDB中输入与输出类似下面类似结构的wx_openid
{
"_id":ObjectId("5486ba25112cdb05d6f49296"),
"reg_src":"",
"cur_src":"",
"is_enable":0,
"dentity":{
"wx_openid":"odS_MjsYJ7bbUFJcAB961WmdQnNQ"
},
"create_date":ISODate("2014-12-09T09:00:21.976Z"),
"update_date":ISODate("2014-12-09T09:00:21.976Z"),
"name":"",
"car_code":""
}
输入:DBObjectdbObject=coll.findOne(newBasicDBObject("dentity.wx_openid",anyway.openid));
输出:DBObjectdentity=(DBObject)dbObject.get("dentity");
statistics.wx_openid=Tools.dealNull(dentity.get("wx_openid"));
*
AND:
Java代码
publicvoidtestAnd(){
//agender='female'ANDage>27
DBObjectqueryCondition=newBasicDBObject();
queryCondition.put("agender","female");
queryCondition.put("age",newBasicDBObject("$gt",27));
DBCursordbCursor=coll.find(queryCondition);
assertEquals(1,dbCursor.size());
assertEquals("Jane",dbCursor.next().get("username"));
}
OR:
Java代码
publicvoidtestOrSingleField(){
DBObjectqueryCondition=newBasicDBObject();
//age<15ORage>27
queryCondition=newBasicDBObject();
BasicDBListvalues=newBasicDBList();
values.add(newBasicDBObject("age",newBasicDBObject("$gt",27)));
values.add(newBasicDBObject("age",newBasicDBObject("$lt",15)));
queryCondition.put("$or",values);
DBCursordbCursor=coll.find(queryCondition);
assertEquals(3,dbCursor.size());
assertEquals("tom",dbCursor.next().get("username"));
}
OR:
Java代码
publicvoidtestOrMultiFields(){
DBObjectqueryCondition=newBasicDBObject();
//agender=femaleORage<=23
queryCondition=newBasicDBObject();
BasicDBListvalues=newBasicDBList();
values.add(newBasicDBObject("agender","female"));
values.add(newBasicDBObject("age",newBasicDBObject("$lte",23)));
queryCondition.put("$or",values);
DBCursordbCursor=coll.find(queryCondition);
assertEquals(4,dbCursor.size());
assertEquals("Jim",dbCursor.next().get("username"));
}
IN:
Java代码
publicvoidtestIn(){
DBObjectqueryCondition=newBasicDBObject();
//agein[13,47]
queryCondition=newBasicDBObject();
BasicDBListvalues=newBasicDBList();
values.add(13);
values.add(47);
queryCondition.put("age",newBasicDBObject("$in",values));
DBCursordbCursor=coll.find(queryCondition);
assertEquals(2,dbCursor.size());
assertEquals("tom",dbCursor.next().get("username"));
}
*日期和编号正则表达式查询
{
"create_date":{
"$gte":ISODate("2015-11-08T00:00:00.000Z"),
"$lte":ISODate("2015-11-08T11:00:00.000Z")
}
"reg_src":/^38017/
}
*//模糊查询
privateBasicDBObjectgetLikeStr(StringfindStr){
Patternpattern=Pattern.compile("^.*"+findStr+".*$",Pattern.MULTILINE);
returnnewBasicDBObject("$regex",pattern);
}
DBObjectquery=newBasicDBObject();
query.put("real_name",getLikeStr(userName));
//endWith文件扩展名
privateBasicDBObjectendWithStr(StringfindStr){
Patternpattern=Pattern.compile(findStr+"$",Pattern.MULTILINE);
returnnewBasicDBObject("$regex",pattern);
}
DBObjectquery=newBasicDBObject();
query.put("filename",endWithStr(“.pdf”));
//startWith文件扩展名
protectedstaticBasicDBObjectstartWithStr(StringfindStr){
Patternpattern=Pattern.compile("^"+findStr,Pattern.MULTILINE);
returnnewBasicDBObject("$regex",pattern);
}
*开发环境:
System:Windows
IDE:eclipse、MyEclipse8
Database:mongoDB
开发依赖库:
JavaEE5、mongo-2.5.3.jar、junit-4.8.2.jar
Email:hoojo_@126.com
Blog:http://blog.csdn.net/IBM_hoojo
http://hoojo.cnblogs.com/
1、首先,下载mongoDB对Java支持的驱动包
驱动包下载地址:https://github.com/mongodb/mongo-java-driver/downloads
mongoDB对Java的相关支持、技术:http://www.mongodb.org/display/DOCS/Java+Language+Center
驱动源码下载:https://download.github.com/mongodb-mongo-java-driver-r2.6.1-7-g6037357.zip
在线查看源码:https://github.com/mongodb/mongo-java-driver
2、下面建立一个JavaProject工程,导入下载下来的驱动包。即可在Java中使用mongoDB,目录如下:
在本示例之前你需要启动mongod.exe的服务,启动后,下面的程序才能顺利执行;
1、建立SimpleTest.java,完成简单的mongoDB数据库操作
Mongomongo=newMongo();
这样就创建了一个MongoDB的数据库连接对象,它默认连接到当前机器的localhost地址,端口是27017。
DBdb=mongo.getDB(“test”);
这样就获得了一个test的数据库,如果mongoDB中没有创建这个数据库也是可以正常运行的。如果你读过上一篇文章就知道,mongoDB可以在没有创建这个数据库的情况下,完成数据的添加操作。当添加的时候,没有这个库,mongoDB会自动创建当前数据库。
得到了db,下一步我们要获取一个“聚集集合DBCollection”,通过db对象的getCollection方法来完成。
DBCollectionusers=db.getCollection("users");
这样就获得了一个DBCollection,它相当于我们数据库的“表”。
查询所有数据
DBCursorcur=users.find();
while(cur.hasNext()){
System.out.println(cur.next());
}
完整源码
{
"_id":ObjectId("5486ba25112cdb05d6f49296"),
"reg_src":"",
"cur_src":"",
"is_enable":0,
"dentity":{
"wx_openid":"odS_MjsYJ7bbUFJcAB961WmdQnNQ"
},
"create_date":ISODate("2014-12-09T09:00:21.976Z"),
"update_date":ISODate("2014-12-09T09:00:21.976Z"),
"name":"",
"car_code":""
}
输入:DBObjectdbObject=coll.findOne(newBasicDBObject("dentity.wx_openid",anyway.openid));
输出:DBObjectdentity=(DBObject)dbObject.get("dentity");
statistics.wx_openid=Tools.dealNull(dentity.get("wx_openid"));
*
AND:
Java代码
publicvoidtestAnd(){
//agender='female'ANDage>27
DBObjectqueryCondition=newBasicDBObject();
queryCondition.put("agender","female");
queryCondition.put("age",newBasicDBObject("$gt",27));
DBCursordbCursor=coll.find(queryCondition);
assertEquals(1,dbCursor.size());
assertEquals("Jane",dbCursor.next().get("username"));
}
OR:
Java代码
publicvoidtestOrSingleField(){
DBObjectqueryCondition=newBasicDBObject();
//age<15ORage>27
queryCondition=newBasicDBObject();
BasicDBListvalues=newBasicDBList();
values.add(newBasicDBObject("age",newBasicDBObject("$gt",27)));
values.add(newBasicDBObject("age",newBasicDBObject("$lt",15)));
queryCondition.put("$or",values);
DBCursordbCursor=coll.find(queryCondition);
assertEquals(3,dbCursor.size());
assertEquals("tom",dbCursor.next().get("username"));
}
OR:
Java代码
publicvoidtestOrMultiFields(){
DBObjectqueryCondition=newBasicDBObject();
//agender=femaleORage<=23
queryCondition=newBasicDBObject();
BasicDBListvalues=newBasicDBList();
values.add(newBasicDBObject("agender","female"));
values.add(newBasicDBObject("age",newBasicDBObject("$lte",23)));
queryCondition.put("$or",values);
DBCursordbCursor=coll.find(queryCondition);
assertEquals(4,dbCursor.size());
assertEquals("Jim",dbCursor.next().get("username"));
}
IN:
Java代码
publicvoidtestIn(){
DBObjectqueryCondition=newBasicDBObject();
//agein[13,47]
queryCondition=newBasicDBObject();
BasicDBListvalues=newBasicDBList();
values.add(13);
values.add(47);
queryCondition.put("age",newBasicDBObject("$in",values));
DBCursordbCursor=coll.find(queryCondition);
assertEquals(2,dbCursor.size());
assertEquals("tom",dbCursor.next().get("username"));
}
*日期和编号正则表达式查询
{
"create_date":{
"$gte":ISODate("2015-11-08T00:00:00.000Z"),
"$lte":ISODate("2015-11-08T11:00:00.000Z")
}
"reg_src":/^38017/
}
*//模糊查询
privateBasicDBObjectgetLikeStr(StringfindStr){
Patternpattern=Pattern.compile("^.*"+findStr+".*$",Pattern.MULTILINE);
returnnewBasicDBObject("$regex",pattern);
}
DBObjectquery=newBasicDBObject();
query.put("real_name",getLikeStr(userName));
//endWith文件扩展名
privateBasicDBObjectendWithStr(StringfindStr){
Patternpattern=Pattern.compile(findStr+"$",Pattern.MULTILINE);
returnnewBasicDBObject("$regex",pattern);
}
DBObjectquery=newBasicDBObject();
query.put("filename",endWithStr(“.pdf”));
//startWith文件扩展名
protectedstaticBasicDBObjectstartWithStr(StringfindStr){
Patternpattern=Pattern.compile("^"+findStr,Pattern.MULTILINE);
returnnewBasicDBObject("$regex",pattern);
}
*开发环境:
System:Windows
IDE:eclipse、MyEclipse8
Database:mongoDB
开发依赖库:
JavaEE5、mongo-2.5.3.jar、junit-4.8.2.jar
Email:hoojo_@126.com
Blog:
一、准备工作
1、首先,下载mongoDB对Java支持的驱动包驱动包下载地址:
mongoDB对Java的相关支持、技术:
驱动源码下载:
在线查看源码:
2、下面建立一个JavaProject工程,导入下载下来的驱动包。即可在Java中使用mongoDB,目录如下:
二、Java操作MongoDB示例
在本示例之前你需要启动mongod.exe的服务,启动后,下面的程序才能顺利执行;1、建立SimpleTest.java,完成简单的mongoDB数据库操作
Mongomongo=newMongo();
这样就创建了一个MongoDB的数据库连接对象,它默认连接到当前机器的localhost地址,端口是27017。
DBdb=mongo.getDB(“test”);
这样就获得了一个test的数据库,如果mongoDB中没有创建这个数据库也是可以正常运行的。如果你
得到了db,下一步我们要获取一个“聚集集合DBCollection”,通过db对象的getCollection方法来完成。
DBCollectionusers=db.getCollection("users");
这样就获得了一个DBCollection,它相当于我们数据库的“表”。
查询所有数据
DBCursorcur=users.find();
while(cur.hasNext()){
System.out.println(cur.next());
}
完整源码
packagecom.hoo.test;
importjava.net.UnknownHostException;
importcom.mongodb.DB;
importcom.mongodb.DBCollection;
importcom.mongodb.DBCursor;
importcom.mongodb.Mongo;
importcom.mongodb.MongoException;
importcom.mongodb.util.JSON;
/**
*<b>function:</b>MongoDB简单示例
*@authorhoojo
*@createDate2011-5-24下午02:42:29
*@fileSimpleTest.java
*@packagecom.hoo.test
*@projectMongoDB
*@blog'target='_blank'>http://blog.csdn.net/IBM_hoojo[/code] *@emailhoojo_@126.com*@version1.0*/publicclassSimpleTest{publicstaticvoidmain(String[]args)throwsUnknownHostException,MongoException{Mongomg=newMongo();//查询所有的Databasefor(Stringname:mg.getDatabaseNames()){System.out.println("dbName:"+name);}DBdb=mg.getDB("test");//查询所有的聚集集合for(Stringname:db.getCollectionNames()){System.out.println("collectionName:"+name);}DBCollectionusers=db.getCollection("users");//查询所有的数据DBCursorcur=users.find();while(cur.hasNext()){System.out.println(cur.next());}System.out.println(cur.count());System.out.println(cur.getCursorId());System.out.println(JSON.serialize(cur));}}
2、完成CRUD操作,首先建立一个MongoDB4CRUDTest.java,基本测试代码如下:packagecom.hoo.test;importjava.net.UnknownHostException;importjava.util.ArrayList;importjava.util.List;importorg.bson.types.ObjectId;importorg.junit.After;importorg.junit.Before;importorg.junit.Test;importcom.mongodb.BasicDBObject;importcom.mongodb.Bytes;importcom.mongodb.DB;importcom.mongodb.DBCollection;importcom.mongodb.DBCursor;importcom.mongodb.DBObject;importcom.mongodb.Mongo;importcom.mongodb.MongoException;importcom.mongodb.QueryOperators;importcom.mongodb.util.JSON;/***<b>function:</b>实现MongoDB的CRUD操作*@authorhoojo*@createDate2011-6-2下午03:21:23*@fileMongoDB4CRUDTest.java*@packagecom.hoo.test*@projectMongoDB*@blog'target='_blank'>http://blog.csdn.net/IBM_hoojo[/code] *@emailhoojo_@126.com*@version1.0*/publicclassMongoDB4CRUDTest{privateMongomg=null;privateDBdb;privateDBCollectionusers;@Beforepublicvoidinit(){try{mg=newMongo();//mg=newMongo("localhost",27017);}catch(UnknownHostExceptione){e.printStackTrace();}catch(MongoExceptione){e.printStackTrace();}//获取tempDB;如果默认没有创建,mongodb会自动创建db=mg.getDB("temp");//获取usersDBCollection;如果默认没有创建,mongodb会自动创建users=db.getCollection("users");}@Afterpublicvoiddestory(){if(mg!=null)mg.close();mg=null;db=null;users=null;System.gc();}publicvoidprint(Objecto){System.out.println(o);}}
3、添加操作
在添加操作之前,我们需要写个查询方法,来查询所有的数据。代码如下:/***<b>function:</b>查询所有数据*@authorhoojo*@createDate2011-6-2下午03:22:40*/privatevoidqueryAll(){print("查询users的所有数据:");//db游标DBCursorcur=users.find();while(cur.hasNext()){print(cur.next());}}@Testpublicvoidadd(){//先查询所有数据queryAll();print("count:"+users.count());DBObjectuser=newBasicDBObject();user.put("name","hoojo");user.put("age",24);//users.save(user)保存,getN()获取影响行数//print(users.save(user).getN());//扩展字段,随意添加字段,不影响现有数据user.put("sex","男");print(users.save(user).getN());//添加多条数据,传递Array对象print(users.insert(user,newBasicDBObject("name","tom")).getN());//添加List集合List<DBObject>list=newArrayList<DBObject>();list.add(user);DBObjectuser2=newBasicDBObject("name","lucy");user.put("age",22);list.add(user2);//添加List集合print(users.insert(list).getN());//查询下数据,看看是否添加成功print("count:"+users.count());queryAll();}
4、删除数据@Testpublicvoidremove(){queryAll();print("删除id=4de73f7acd812d61b4626a77:"+users.remove(newBasicDBObject("_id",newObjectId("4de73f7acd812d61b4626a77"))).getN());print("removeage>=24:"+users.remove(newBasicDBObject("age",newBasicDBObject("$gte",24))).getN());}
5、修改数据@Testpublicvoidmodify(){print("修改:"+users.update(newBasicDBObject("_id",newObjectId("4dde25d06be7c53ffbd70906")),newBasicDBObject("age",99)).getN());print("修改:"+users.update(newBasicDBObject("_id",newObjectId("4dde2b06feb038463ff09042")),newBasicDBObject("age",121),true,//如果数据库不存在,是否添加false//多条修改).getN());print("修改:"+users.update(newBasicDBObject("name","haha"),newBasicDBObject("name","dingding"),true,//如果数据库不存在,是否添加true//false只修改第一天,true如果有多条就不修改).getN());//当数据库不存在就不修改、不添加数据,当多条数据就不修改//print("修改多条:"+coll.updateMulti(newBasicDBObject("_id",newObjectId("4dde23616be7c19df07db42c")),newBasicDBObject("name","199")));}
6、查询数据@Testpublicvoidquery(){//查询所有//queryAll();//查询id=4de73f7acd812d61b4626a77print("findid=4de73f7acd812d61b4626a77:"+users.find(newBasicDBObject("_id",newObjectId("4de73f7acd812d61b4626a77"))).toArray());//查询age=24print("findage=24:"+users.find(newBasicDBObject("age",24)).toArray());//查询age>=24print("findage>=24:"+users.find(newBasicDBObject("age",newBasicDBObject("$gte",24))).toArray());print("findage<=24:"+users.find(newBasicDBObject("age",newBasicDBObject("$lte",24))).toArray());print("查询age!=25:"+users.find(newBasicDBObject("age",newBasicDBObject("$ne",25))).toArray());print("查询agein25/26/27:"+users.find(newBasicDBObject("age",newBasicDBObject(QueryOperators.IN,newint[]{25,26,27}))).toArray());print("查询agenotin25/26/27:"+users.find(newBasicDBObject("age",newBasicDBObject(QueryOperators.NIN,newint[]{25,26,27}))).toArray());print("查询ageexists排序:"+users.find(newBasicDBObject("age",newBasicDBObject(QueryOperators.EXISTS,true))).toArray());print("只查询age属性:"+users.find(null,newBasicDBObject("age",true)).toArray());print("只查属性:"+users.find(null,newBasicDBObject("age",true),0,2).toArray());print("只查属性:"+users.find(null,newBasicDBObject("age",true),0,2,Bytes.QUERYOPTION_NOTIMEOUT).toArray());//只查询一条数据,多条去第一条print("findOne:"+users.findOne());print("findOne:"+users.findOne(newBasicDBObject("age",26)));print("findOne:"+users.findOne(newBasicDBObject("age",26),newBasicDBObject("name",true)));//查询修改、删除print("findAndRemove查询age=25的数据,并且删除:"+users.findAndRemove(newBasicDBObject("age",25)));//查询age=26的数据,并且修改name的值为Abcprint("findAndModify:"+users.findAndModify(newBasicDBObject("age",26),newBasicDBObject("name","Abc")));print("findAndModify:"+users.findAndModify(newBasicDBObject("age",28),//查询age=28的数据newBasicDBObject("name",true),//查询name属性newBasicDBObject("age",true),//按照age排序false,//是否删除,true表示删除newBasicDBObject("name","Abc"),//修改的值,将name修改成Abctrue,true));queryAll();}
mongoDB不支持联合查询、子查询,这需要我们自己在程序中完成。将查询的结果集在Java查询中进行需要的过滤即可。
7、其他操作publicvoidtestOthers(){DBObjectuser=newBasicDBObject();user.put("name","hoojo");user.put("age",24);//JSON对象转换print("serialize:"+JSON.serialize(user));//反序列化print("parse:"+JSON.parse("{\"name\":\"hoojo\",\"age\":24}"));print("判断tempCollection是否存在:"+db.collectionExists("temp"));//如果不存在就创建if(!db.collectionExists("temp")){DBObjectoptions=newBasicDBObject();options.put("size",20);options.put("capped",20);options.put("max",20);print(db.createCollection("account",options));}//设置db为只读db.setReadOnly(true);//只读不能写入数据db.getCollection("test").save(user);}
*.查看mongodb的版本
cmd进入mongodb的安装目录的bin目录下输入:mongod--dbpath=d:\mongodb\db(我的mongodb是安装在D盘下的)
*.启动mongodb
cmd进入mongodb的安装目录的bin目录下输入:mongod--dbpathd:/mongodb/data--auth
相关文章推荐
- MongoDB 学习笔记
- weibocatch mysql 和 mongodb 还原
- mongoDB 3.0 安全权限访问控制
- 【mongoDB基础篇②】PHP-mongo扩展的编译以及使用
- MongoDB配置文件说明
- MongoDB MapReduce 使用
- MongoDB默认配置
- 【mongoDB基础篇①】安装与常用操作语句
- mongodb db.serverStatus()解析 详解
- MongoDB性能优化
- MongoDB索引与性能
- MongoDB整库备份与还原以及单个collection备份、恢复方法
- MongoDB性能监控
- MongoDB命令行与进程
- MongoDB数据管理和控制
- JAVA-查看MongoDB中的数据(包含List集合)
- JAVA-查看MongoDB中的数据(包含Map集合)
- JAVA -导数到MongoDB(含MAP集合)
- mongodb3.0集群部署及数据迁移
- JAVA-导数到Mongodb (Mongodb中有List集合)