JAVA 操作MongoDB
本文内容纲要:
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