MongoDB的3.x版本Java驱动相对2.x做了全新的设计,类库和使用方法上有很大区别。例如用Document替换BasicDBObject、通过Builders类构建Bson替代直接输入$命令等,本文整理了基于3.2版本的常用增删改查操作的使用方法。为了避免冗长的篇幅,分为增删改、查询、聚合、地理索引等几部分。本篇主要介绍记录一下自己的一个mongodb的工具类,测试了简单的一些增、删、改以及建索引的一些方法。
创建一个maven项目,添加依赖
[java]viewplaincopy
print?
org.mongodb mongodb-driver 3.2.2非maven项目可自行下载jar包
http://central.maven.org/maven2/org/mongodb/mongo-java-driver/3.2.2/mongo-java-driver-3.2.2.jar
mongodb工具类:
1packagecom.wd.util; 2 3importjava.util.ArrayList; 4importjava.util.Arrays; 5importjava.util.List; 6importorg.bson.Document; 7importorg.bson.conversions.Bson; 8importorg.bson.types.ObjectId; 9 10importcom.mongodb.BasicDBObject; 11importcom.mongodb.DB; 12importcom.mongodb.DBCollection; 13importcom.mongodb.DBCursor; 14importcom.mongodb.MongoClient; 15importcom.mongodb.MongoClientOptions; 16importcom.mongodb.MongoClientOptions.Builder; 17importcom.mongodb.WriteConcern; 18importcom.mongodb.client.AggregateIterable; 19importcom.mongodb.client.FindIterable; 20importcom.mongodb.client.ListIndexesIterable; 21importcom.mongodb.client.MongoCollection; 22importcom.mongodb.client.MongoCursor; 23importcom.mongodb.client.MongoDatabase; 24importcom.mongodb.client.MongoIterable; 25importcom.mongodb.client.model.Filters; 26importstaticcom.mongodb.client.model.Filters.*; 27importstaticcom.mongodb.client.model.Projections.*; 28importstaticcom.mongodb.client.model.Sorts.*; 29importstaticcom.mongodb.client.model.Accumulators.*; 30importstaticcom.mongodb.client.model.Aggregates.*; 31importcom.mongodb.client.model.IndexOptions; 32importcom.mongodb.client.model.Projections; 33importcom.mongodb.client.model.UpdateOptions; 34importcom.mongodb.client.model.Updates.*; 35importcom.mongodb.client.result.DeleteResult; 36importcom.wd.backend.model.AffiliationJG; 37importcom.wd.backend.model.AffiliationList; 38 39importnet.sf.json.JSONArray; 40importnet.sf.json.JSONObject; 41importnet.sf.json.JsonConfig; 42 43 44publicenumMongoUtil{ 45/** 46*定义一个枚举的元素,它代表此类的一个实例 47*/ 48instance; 49 50privatestaticMongoClientmongoClient; 51 52static{ 53System.out.println("===============MongoDBUtil初始化========================"); 54Stringip="192.168.1.75"; 55intport=27017; 56instance.mongoClient=newMongoClient(ip,port); 57//大部分用户使用mongodb都在安全内网下,但如果将mongodb设为安全验证模式,就需要在客户端提供用户名和密码: 58//booleanauth=db.authenticate(myUserName,myPassword); 59Builderoptions=newMongoClientOptions.Builder(); 60options.cursorFinalizerEnabled(true); 61//options.autoConnectRetry(true);//自动重连true 62//options.maxAutoConnectRetryTime(10);//themaximumautoconnectretrytime 63options.connectionsPerHost(300);//连接池设置为300个连接,默认为100 64options.connectTimeout(30000);//连接超时,推荐>3000毫秒 65options.maxWaitTime(5000);// 66options.socketTimeout(0);//套接字超时时间,0无限制 67options.threadsAllowedToBlockForConnectionMultiplier(5000);//线程队列数,如果连接线程排满了队列就会抛出“Outofsemaphorestogetdb”错误。 68options.writeConcern(WriteConcern.SAFE);// 69options.build(); 70} 71 72//------------------------------------共用方法--------------------------------------------------- 73/** 74*获取DB实例-指定DB 75* 76*@paramdbName 77*@return 78*/ 79publicMongoDatabasegetDB(StringdbName){ 80if(dbName!=null&&!"".equals(dbName)){ 81MongoDatabasedatabase=mongoClient.getDatabase(dbName); 82returndatabase; 83} 84returnnull; 85} 86 87/** 88*获取collection对象-指定Collection 89* 90*@paramcollName 91*@return 92*/ 93publicMongoCollection<Document>getCollection(StringdbName,StringcollName){ 94if(null==collName||"".equals(collName)){ 95returnnull; 96} 97if(null==dbName||"".equals(dbName)){ 98returnnull; 99} 100MongoCollection<Document>collection=mongoClient.getDatabase(dbName).getCollection(collName); 101returncollection; 102} 103 104/** 105*查询DB下的所有表名 106*/ 107publicList<String>getAllCollections(StringdbName){ 108MongoIterable<String>colls=getDB(dbName).listCollectionNames(); 109List<String>_list=newArrayList<String>(); 110for(Strings:colls){ 111_list.add(s); 112} 113return_list; 114} 115 116/** 117*获取所有数据库名称列表 118* 119*@return 120*/ 121publicMongoIterable<String>getAllDBNames(){ 122MongoIterable<String>s=mongoClient.listDatabaseNames(); 123returns; 124} 125 126/** 127*删除一个数据库 128*/ 129publicvoiddropDB(StringdbName){ 130getDB(dbName).drop(); 131} 132 133/** 134*查找对象-根据主键_id 135* 136*@paramcollection 137*@paramid 138*@return 139*/ 140publicDocumentfindById(MongoCollection<Document>coll,Stringid){ 141ObjectId_idobj=null; 142try{ 143_idobj=newObjectId(id); 144}catch(Exceptione){ 145returnnull; 146} 147DocumentmyDoc=coll.find(Filters.eq("_id",_idobj)).first(); 148returnmyDoc; 149} 150 151/**统计数*/ 152publicintgetCount(MongoCollection<Document>coll){ 153intcount=(int)coll.count(); 154returncount; 155} 156 157/**条件查询*/ 158publicMongoCursor<Document>find(MongoCollection<Document>coll,Bsonfilter){ 159returncoll.find(filter).iterator(); 160} 161 162/**分页查询*/ 163publicMongoCursor<Document>findByPage(MongoCollection<Document>coll,Bsonfilter,intpageNo,intpageSize){ 164BsonorderBy=newBasicDBObject("_id",1); 165returncoll.find(filter).sort(orderBy).skip((pageNo-1)*pageSize).limit(pageSize).iterator(); 166} 167 168 169/** 170*通过ID删除 171* 172*@paramcoll 173*@paramid 174*@return 175*/ 176publicintdeleteById(MongoCollection<Document>coll,Stringid){ 177intcount=0; 178ObjectId_id=null; 179try{ 180_id=newObjectId(id); 181}catch(Exceptione){ 182return0; 183} 184Bsonfilter=Filters.eq("_id",_id); 185DeleteResultdeleteResult=coll.deleteOne(filter); 186count=(int)deleteResult.getDeletedCount(); 187returncount; 188} 189 190/** 191*FIXME 192* 193*@paramcoll 194*@paramid 195*@paramnewdoc 196*@return 197*/ 198publicDocumentupdateById(MongoCollection<Document>coll,Stringid,Documentnewdoc){ 199ObjectId_idobj=null; 200try{ 201_idobj=newObjectId(id); 202}catch(Exceptione){ 203returnnull; 204} 205Bsonfilter=Filters.eq("_id",_idobj); 206//coll.replaceOne(filter,newdoc);//完全替代 207coll.updateOne(filter,newDocument("$set",newdoc)); 208returnnewdoc; 209} 210 211publicvoiddropCollection(StringdbName,StringcollName){ 212getDB(dbName).getCollection(collName).drop(); 213} 214 215/** 216*关闭Mongodb 217*/ 218publicvoidclose(){ 219if(mongoClient!=null){ 220mongoClient.close(); 221mongoClient=null; 222} 223} 224 225/** 226*测试入口 227* 228*@paramargs 229*@throwsCloneNotSupportedException 230*/ 231publicstaticvoidmain(String[]args){ 232 233StringdbName="test"; 234StringcollName="wd_paper_scie"; 235MongoCollection<Document>coll=MongoUtil.instance.getCollection(dbName,collName); 236//coll.createIndex(newDocument("validata",1));//创建索引 237//coll.createIndex(newDocument("id",1)); 238//coll.createIndex(newDocument("ut_wos",1),newIndexOptions().unique(true));//创建唯一索引 239//coll.dropIndexes();//删除索引 240//coll.dropIndex("validata_1");//根据索引名删除某个索引 241ListIndexesIterable<Document>list=coll.listIndexes();//查询所有索引 242for(Documentdocument:list){ 243System.out.println(document.toJson()); 244} 245coll.find(Filters.and(Filters.eq("x",1),Filters.lt("y",3))); 246coll.find(and(eq("x",1),lt("y",3))); 247coll.find().sort(ascending("title")); 248coll.find().sort(newDocument("id",1)); 249coll.find(newDocument("$or",Arrays.asList(newDocument("owner","tom"),newDocument("words",newDocument("$gt",350))))); 250coll.find().projection(fields(include("title","owner"),excludeId())); 251//coll.updateMany(Filters.eq("validata",1),Updates.set("validata",0)); 252//coll.updateMany(Filters.eq("validata",1),newDocument("$unset",newDocument("jigou","")));//删除某个字段 253//coll.updateMany(Filters.eq("validata",1),newDocument("$rename",newDocument("affiliation","affiliation_full")));//修改某个字段名 254//coll.updateMany(Filters.eq("validata",1),newDocument("$rename",newDocument("affiliationMeta","affiliation"))); 255//coll.updateMany(Filters.eq("validata",1),newDocument("$set",newDocument("validata",0)));//修改字段值 256//MongoCursor<Document>cursor1=coll.find(Filters.eq("ut_wos","WOS:000382970200003")).iterator(); 257//while(cursor1.hasNext()){ 258//Documentsd=cursor1.next(); 259//System.out.println(sd.toJson()); 260//coll.insertOne(sd); 261//} 262 263//MongoCursor<Document>cursor1=coll.find(Filters.elemMatch("affInfo",Filters.eq("firstorg",1))).iterator(); 264//while(cursor1.hasNext()){ 265//Documentsd=cursor1.next(); 266//System.out.println(sd.toJson()); 267//} 268//查询只返回指定字段 269//MongoCursor<Document>doc=coll.find().projection(Projections.fields(Projections.include("ut_wos","affiliation"),Projections.excludeId())).iterator(); 270//"ut_wos":"WOS:000382970200003" 271//coll.updateMany(Filters.eq("validata",1),newDocument("$set",newDocument("validata",0))); 272//coll.updateMany(Filters.eq("validata",0),newDocument("$rename",newDocument("sid","ssid")),newUpdateOptions().upsert(false)); 273//coll.updateOne(Filters.eq("ut_wos","WOS:000382970200003"),newDocument("$set",newDocument("validata",0))); 274//longisd=coll.count(Filters.elemMatch("affInfo",Filters.elemMatch("affiliationJGList",Filters.eq("sid",0)))); 275//System.out.println(isd); 276//MongoCursor<Document>doc=coll.find(Filters.elemMatch("affInfo",Filters.elemMatch("affiliationJGList",Filters.ne("sid",0)))).projection(Projections.fields(Projections.elemMatch("affInfo"),Projections.excludeId())).iterator(); 277//MongoCursor<Document>doc=coll.find().projection(Projections.include("affInfo","ssid")).iterator(); 278//while(doc.hasNext()){ 279//Documentsd=doc.next(); 280//System.out.println(sd.toJson()); 281// 282//} 283MongoUtil.instance.close(); 284//插入多条 285//for(inti=1;i<=4;i++){ 286//Documentdoc=newDocument(); 287//doc.put("name","zhoulf"); 288//doc.put("school","NEFU"+i); 289//Documentinterests=newDocument(); 290//interests.put("game","game"+i); 291//interests.put("ball","ball"+i); 292//doc.put("interests",interests); 293//coll.insertOne(doc); 294//} 295// 296/*MongoCursor<Document>sd=coll.find().iterator(); 297while(sd.hasNext()){ 298Documentdoc=sd.next(); 299Stringid=doc.get("_id").toString(); 300List<AffiliationJG>list=newArrayList<AffiliationJG>(); 301AffiliationJGjg=newAffiliationJG(); 302jg.setAddress("123"); 303jg.setCid(2); 304jg.setCname("eeee"); 305jg.setSid(3); 306jg.setSname("rrrr"); 307AffiliationJGjg2=newAffiliationJG(); 308jg2.setAddress("3242"); 309jg2.setCid(2); 310jg2.setCname("ers"); 311jg2.setSid(3); 312jg2.setSname("rasdr"); 313list.add(jg); 314list.add(jg2); 315AffiliationListaf=newAffiliationList(); 316af.setAffiliationAuthos("33333"); 317af.setAffiliationinfo("asdsa"); 318af.setAffiliationJGList(list); 319JSONObjectjson=JSONObject.fromObject(af); 320doc.put("affInfo",json); 321MongoDBUtil.instance.updateById(coll,id,doc); 322}*/ 323 324//Bsonbs=Filters.eq("name","zhoulf"); 325//coll.find(bs).iterator(); 326////根据ID查询 327//Stringid="556925f34711371df0ddfd4b"; 328//Documentdoc=MongoDBUtil2.instance.findById(coll,id); 329//System.out.println(doc); 330 331//查询多个 332//MongoCursor<Document>cursor1=coll.find(Filters.eq("name","zhoulf")).iterator(); 333//while(cursor1.hasNext()){ 334//org.bson.Document_doc=(Document)cursor1.next(); 335//System.out.println(_doc.toString()); 336//} 337//cursor1.close(); 338 339//查询多个 340//MongoCursor<WdPaper>cursor2=coll.find(WdPaper.class).iterator(); 341//while(cursor2.hasNext()){ 342//WdPaperdoc=cursor2.next(); 343//System.out.println(doc.getUt_wos()); 344//} 345//删除数据库 346//MongoDBUtil2.instance.dropDB("testdb"); 347 348//删除表 349//MongoDBUtil2.instance.dropCollection(dbName,collName); 350 351//修改数据 352//Stringid="556949504711371c60601b5a"; 353//Documentnewdoc=newDocument(); 354//newdoc.put("name","时候"); 355//MongoDBUtil.instance.updateById(coll,id,newdoc); 356 357//统计表 358//System.out.println(MongoDBUtil.instance.getCount(coll)); 359 360//查询所有 361//Bsonfilter=Filters.eq("count",0); 362//MongoDBUtil.instance.find(coll,filter); 363 364} 365 366}本文内容总结:
原文链接:https://www.cnblogs.com/sa-dan/p/6836055.html