pom.xml文件dependencies标签下加入:
<dependency> <groupId>org.mongodb</groupId> <artifactId>mongodb-driver</artifactId> <version>3.3.0</version> </dependency>
java操作类
package com.thinkgem.jeesite.common.utils; import com.mongodb.*; import com.mongodb.client.FindIterable; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoCursor; import com.mongodb.client.MongoDatabase; import org.bson.Document; import java.util.ArrayList; import java.util.List; import java.util.Map; public class MongoManager { private final static String HOST = "192.168.0.137";// 端口 private final static String DB_NAME = "test"; private final static int PORT = 27017;// 端口 private final static int POOLSIZE = 100;// 连接数量 private final static int BLOCKSIZE = 100; // 等待队列长度 private final static String USER_NAME = "root"; private final static String PWD = "123456"; private final static String AUTH = "admin"; private static MongoClient mongo = null; private static MongoManager single = null; private MongoManager() { } public synchronized static MongoManager getInstance() { if (single == null) { single = new MongoManager(); initMongoClient(); } return single; } private static void initMongoClient() { if (null != USER_NAME && !"".equals(USER_NAME) && null != PWD && !"".equals(PWD) && null != AUTH && !"".equals(AUTH)) { //mongo安全认证 登录 MongoCredential.createCredential ServerAddress serverAddress = new ServerAddress(HOST, PORT); List<ServerAddress> seeds = new ArrayList<ServerAddress>(); seeds.add(serverAddress); MongoCredential credentials = MongoCredential.createCredential(USER_NAME, AUTH, PWD.toCharArray()); List<MongoCredential> credentialsList = new ArrayList<MongoCredential>(); credentialsList.add(credentials); mongo = new MongoClient(seeds, credentialsList); } else { mongo = new MongoClient(HOST, PORT); } MongoClientOptions.Builder options = new MongoClientOptions.Builder(); options.connectionsPerHost(POOLSIZE); options.threadsAllowedToBlockForConnectionMultiplier(BLOCKSIZE); options.build(); } /** * 获取数据库对象 * @return */ private MongoDatabase getDB() { return mongo.getDatabase(DB_NAME); } /** * 保存 * @param collectionName 集合名 * @param map * @return */ public boolean save(String collectionName, Map<String, Object> map) { MongoDatabase db = getDB(); MongoCollection dbCollection = db.getCollection(collectionName); long num = dbCollection.count(); Document doc = new Document(); this.gSaveData(map, doc); dbCollection.insertOne(doc); if (dbCollection.count() - num > 0) { System.out.println("添加数据成功!!!"); return true; } return false; } /** * * @param collectionName * @param map * @param isCreateCollection 集合不存在则创建 * @return */ public boolean save(String collectionName, Map<String, Object> map, boolean isCreateCollection) { MongoDatabase db = getDB(); MongoCollection dbCollection = db.getCollection(collectionName); if (null == dbCollection && isCreateCollection) { db.createCollection(collectionName); dbCollection = db.getCollection(collectionName); } long num = dbCollection.count(); Document doc = new Document(); this.gSaveData(map, doc); dbCollection.insertOne(doc); if (dbCollection.count() - num > 0) { System.out.println("添加数据成功!!!"); return true; } return false; } /** * 修改 * @param collectionName * @param map 查询的map参数 * @param d 文档 * @return */ public boolean update(String collectionName, Map<String, Object> map, Document d) { MongoDatabase db = getDB(); MongoCollection dbCollection = db.getCollection(collectionName); long num = dbCollection.count(); BasicDBObject dbObject = new BasicDBObject(); dbObject.putAll(map); dbCollection.findOneAndReplace(dbObject, d); return true; } public void gSaveData(Map<String, Object> map, Document doc) { if (null != map) { doc.putAll(map); } } /** * 获取表(集合) * * @return */ public MongoCollection getCollection(String collectionName) { MongoDatabase db = getDB(); MongoCollection<Document> table = db.getCollection(collectionName); return table; } /** * mongodb中按age字段倒序查询(-1是倒序,1是正序) * 查询出一条数据 * @param dbName * @param collectionName * @param sortKey * @param sortType */ public void findOne(String dbName, String collectionName, String sortKey, int sortType) { MongoCollection table = getCollection(collectionName); BasicDBObject dbObject = new BasicDBObject(); dbObject.put(sortKey, sortType); FindIterable iterate = table.find().sort(dbObject).limit(1); System.out.println(iterate.iterator().tryNext()); } /** * mongodb分页查询 * @param pageIndex 当前页码 */ public MongoCursor findPage(int pageIndex, String collectionName) { int pageSize = 3; MongoCollection table = getCollection(collectionName); //mongodb分页查询出游标 return table.find().limit(pageSize).skip((pageIndex - 1) * pageSize).iterator(); } /** * 查询所有记录 */ public MongoCursor findAll(String collectionName) { MongoCollection table = getCollection(collectionName); //mongodb分页查询出游标 return table.find().iterator(); } /** * 等于查询 */ public MongoCursor comparison( String collectionName, String key, String value) { MongoCollection table = getCollection(collectionName); BasicDBObject dbObject = new BasicDBObject(); dbObject.put(key, value); MongoCursor cursor = table.find(dbObject).iterator(); return cursor; } /** * 查询一条根据等于 * @param collectionName * @param key * @param value * @return */ public Document comparisonOne( String collectionName, String key, String value) { MongoCollection table = getCollection(collectionName); BasicDBObject dbObject = new BasicDBObject(); dbObject.put(key, value); Document d = (Document) table.find(dbObject).iterator().tryNext(); return d; } //多条件等于查询一条 public Document comparisonOne( String collectionName, Map<String, Object> map) { MongoCollection table = getCollection(collectionName); BasicDBObject dbObject = new BasicDBObject(); dbObject.putAll(map); Document d = (Document) table.find(dbObject).iterator().tryNext(); return d; } /** * 使用in包含查询 */ public MongoCursor findIn(String collectionName,String key, List<String> list) { //定义一个数组存储in查询的条件值 MongoCollection table = getCollection(collectionName); BasicDBObject dbObject = new BasicDBObject(); //这里使用BasicDBObject嵌套来并使用$in预定义名称来实现mongodb的in查询功能 dbObject.put(key, new BasicDBObject("$in", list)); MongoCursor cursor = table.find(dbObject).iterator(); return cursor; } /** * 不等于查询 */ public MongoCursor findNe(String collectionName,String key,String value) { MongoCollection table = getCollection(collectionName); BasicDBObject dbObject = new BasicDBObject(); dbObject.put(key, new BasicDBObject("$ne", value)); MongoCursor cursor = table.find(dbObject).iterator(); return cursor; } /** * mongodb实现大于小于区间的查询,注意大于是$gt,小于是$lt * 大于小于区间查询 */ public void findGtLt(String collectionName, String key, String gt, String lt) { MongoCollection table = getCollection(collectionName); BasicDBObject dbObject = new BasicDBObject(); dbObject.put(key, new BasicDBObject("$gt", gt).append("$lt", lt)); MongoCursor cursor = table.find(dbObject).iterator(); while (cursor.hasNext()) { System.out.println(cursor.next()); } } /** * 等于查询,排序 */ public MongoCursor comparisonSort( String collectionName, String key, String value,String sortKey,int type) { MongoCollection table = getCollection(collectionName); BasicDBObject dbObject = new BasicDBObject(); dbObject.put(key, value); BasicDBObject dbObjectSort = new BasicDBObject(); dbObjectSort.put(sortKey, type); MongoCursor cursor = table.find(dbObject).sort(dbObjectSort).iterator(); return cursor; } /** * 多条件查询需要先定义一个BasicDBObject数组来存储多个条件 例如 * List<BasicDBObject> objects = new ArrayList<BasicDBObject>(); * objects.add(new BasicDBObject("age", new BasicDBObject("$ne", 17))); * objects.add(new BasicDBObject("name", "zhangsan")); * 多条件查询 */ public void findMulti(String collectionName, List<BasicDBObject> objects) { MongoCollection table = getCollection(collectionName); BasicDBObject query = new BasicDBObject(); query.put("$and", objects); MongoCursor cursor = table.find(query).iterator(); while (cursor.hasNext()) { System.out.println(cursor.next()); } } /** * 分页查询 * @param page * @param pageSize * @return */ public MongoCursor pageList(String collectionName, Map<String, Object> map, String sortKey, int type, int page, int pageSize) { MongoCollection table = getCollection(collectionName); BasicDBObject dbObject = new BasicDBObject(); if (null != map) { for (Map.Entry<String, Object> entry : map.entrySet()) { dbObject.put(entry.getKey(), entry.getValue()); } } BasicDBObject dbObjectSort = new BasicDBObject(); dbObjectSort.put(sortKey, type); //mongodb分页查询出游标 MongoCursor limit = table.find(dbObject).skip((page - 1) * pageSize).sort(dbObjectSort).limit(pageSize).iterator(); return limit; } /** * 获取总记录数 * * @return */ public long pageListCount(String collectionName, Map<String, Object> map) { MongoCollection table = getCollection(collectionName); BasicDBObject dbObject = new BasicDBObject(); if (null != map) { for (Map.Entry<String, Object> entry : map.entrySet()) { dbObject.put(entry.getKey(), entry.getValue()); } } return table.count(dbObject); } public void deleteOne(String collectionName,String key, String value){ Document filter = new Document(); filter.append(key, value); MongoCollection table = getCollection(collectionName); table.deleteOne(filter); } }
以上代码有摘选和借鉴其他博文,特此注明。
子集查询例如有mongo集合的数据json格式如下
/* 1 */ { "_id" : "57c3b8a0a6b3a50920e38cx9", "accountId" : "N00000000011", "phone" : [{ "tel" : "18211111111" }, { "tel" : "18211111110" }], "name" : "pcz1" } /* 2 */ { "_id" : "57c01e7ba6b3a513e0f4af2c", "accountId" : "N00000000011", "phone" : [{ "tel" : "18221536162" }], "name" : "pcz6" }
那么如何根据tel字段查询:
Map<String, Object> _qmap = new HashMap<String, Object>(); _qmap.put("phone.tel", "18211111111"); _qmap.put("name", "pcz1"); Document object = MongoManager.getInstance().comparisonOne(yourCollectionName,_qmap);
1647total visits,1visits today
Leave a Reply