package com.x.mongodb; import java.net.UnknownHostException; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import org.bson.types.BasicBSONList; import org.bson.types.ObjectId; import com.mongodb.BasicDBObject; import com.mongodb.DB; import com.mongodb.DBCollection; import com.mongodb.DBCursor; import com.mongodb.DBObject; import com.mongodb.Mongo; import com.mongodb.MongoException; /** * 查询</br> * : $in { "name1" : { "$in" : [ "zhou28-1" , "zhou29"]}}</br> * : $nin { "age" : { "$nin" : [ 1 , 2]}} * : $or { "$or" : [ { "name1" : { "$in" : [ "zhou28-1" , "zhou29"]}}]}</br> * : $or and{ "$or" : [ { "name1" : { "$in" : [ "zhou28-1" , "zhou29"]}}] , "name2" : "zhou"}</br> * : 范围查询 { "age" : { "$gte" : 2 , "$lte" : 21}}</br> * : $ne { "age" : { "$ne" : 23}}</br> * : $lt { "age" : { "$lt" : 23}} * @author <a href="http://blog.csdn.net/java2000_wl">java2000_wl</a> * @version <b>1.0</b> */ public final class MongoDBUtil { private static final String HOST = "127.0.0.1"; private static final String dbName = "test"; private static Mongo mongo; private static DB db; static { try { mongo = new Mongo(HOST); db = mongo.getDB(dbName); // db.authenticate(username, passwd) } catch (UnknownHostException e) { e.printStackTrace(); } catch (MongoException e) { e.printStackTrace(); } } private MongoDBUtil() { } /** * 判断集合是否存在 * <br>------------------------------<br> * @param collectionName * @return */ public static boolean collectionExists(String collectionName) { return db.collectionExists(collectionName); } /** * 查询单个,按主键查询 * <br>------------------------------<br> * @param id * @param collectionName */ public static void findById(String id, String collectionName) { Map<String, Object> map = new HashMap<String, Object>(); map.put("_id", new ObjectId(id)); findOne(map, collectionName); } /** * 查询单个 * <br>------------------------------<br> * @param map * @param collectionName */ public static void findOne(Map<String, Object> map, String collectionName) { DBObject dbObject = getMapped(map); DBObject object = getCollection(collectionName).findOne(dbObject); print(object); } /** * 查询全部 * <br>------------------------------<br> * @param cursor * @param collectionName */ public static void findAll(CursorObject cursor, String collectionName) { find(new HashMap<String, Object>(), cursor, collectionName); } /** * count * <br>------------------------------<br> * @param map * @param collectionName * @return */ public static long count(Map<String, Object> map, String collectionName) { DBObject dbObject = getMapped(map); return getCollection(collectionName).count(dbObject); } /** * 按条件查询 </br> * 支持skip,limit,sort * <br>------------------------------<br> * @param map * @param cursor * @param collectionName */ public static void find(Map<String, Object> map, CursorObject cursor, String collectionName) { DBObject dbObject = getMapped(map); find(dbObject, cursor, collectionName); } /** * 查询 * <br>------------------------------<br> * @param dbObject * @param cursor * @param collectionName */ public static void find(DBObject dbObject, final CursorObject cursor, String collectionName) { CursorPreparer cursorPreparer = cursor == null ? null : new CursorPreparer() { public DBCursor prepare(DBCursor dbCursor) { if (cursor == null) { return dbCursor; } if (cursor.getLimit() <= 0 && cursor.getSkip() <=0 && cursor.getSortObject() == null) { return dbCursor; } DBCursor cursorToUse = dbCursor; if (cursor.getSkip() > 0) { cursorToUse = cursorToUse.skip(cursor.getSkip()); } if (cursor.getLimit() > 0) { cursorToUse = cursorToUse.limit(cursor.getLimit()); } if (cursor.getSortObject() != null) { cursorToUse = cursorToUse.sort(cursor.getSortObject()); } return cursorToUse; } }; find(dbObject, cursor, cursorPreparer, collectionName); } /** * 查询 * <br>------------------------------<br> * @param dbObject * @param cursor * @param cursorPreparer * @param collectionName */ public static void find(DBObject dbObject, CursorObject cursor, CursorPreparer cursorPreparer, String collectionName) { DBCursor dbCursor = getCollection(collectionName).find(dbObject); if (cursorPreparer != null) { dbCursor = cursorPreparer.prepare(dbCursor); } Iterator<DBObject> iterator = dbCursor.iterator(); while (iterator.hasNext()) { print(iterator.next()); } } /** * 获取集合(表) * <br>------------------------------<br> * @param collectionName * @return */ public static DBCollection getCollection(String collectionName) { return db.getCollection(collectionName); } /** * 获取所有集合名称 * <br>------------------------------<br> * @return */ public static Set<String> getCollection() { return db.getCollectionNames(); } /** * 创建集合 * <br>------------------------------<br> * @param collectionName * @param options */ public static void createCollection(String collectionName, DBObject options) { db.createCollection(collectionName, options); } /** * 删除 * <br>------------------------------<br> * @param collectionName */ public static void dropCollection(String collectionName) { DBCollection collection = getCollection(collectionName); collection.drop(); } /** * * <br>------------------------------<br> * @param map * @return */ private static DBObject getMapped(Map<String, Object> map) { DBObject dbObject = new BasicDBObject(); Iterator<Entry<String, Object>> iterable = map.entrySet().iterator(); while (iterable.hasNext()) { Entry<String, Object> entry = iterable.next(); Object value = entry.getValue(); String key = entry.getKey(); if (key.startsWith("$") && value instanceof Map) { BasicBSONList basicBSONList = new BasicBSONList(); Map<String, Object> conditionsMap = ((Map)value); Set<String> keys = conditionsMap.keySet(); for (String k : keys) { Object conditionsValue = conditionsMap.get(k); if (conditionsValue instanceof Collection) { conditionsValue = convertArray(conditionsValue); } DBObject dbObject2 = new BasicDBObject(k, conditionsValue); basicBSONList.add(dbObject2); } value = basicBSONList; } else if (value instanceof Collection) { value = convertArray(value); } else if (!key.startsWith("$") && value instanceof Map) { value = getMapped(((Map)value)); } dbObject.put(key, value); } return dbObject; } private static Object[] convertArray(Object value) { Object[] values = ((Collection)value).toArray(); return values; } private static void print(DBObject object) { Set<String> keySet = object.keySet(); for (String key : keySet) { print(object.get(key)); } } private static void print(Object object) { System.out.println(object.toString()); } }
package com.x.mongodb; /** * 排序规则 * @author <a href="http://blog.csdn.net/java2000_wl">java2000_wl</a> * @version <b>1.0</b> */ public enum Order { ASC, DESC }
package com.x.mongodb; import java.util.LinkedHashMap; import java.util.Map; import com.mongodb.BasicDBObject; import com.mongodb.DBObject; /** * 排序对象 * @author <a href="http://blog.csdn.net/java2000_wl">java2000_wl</a> * @version <b>1.0</b> */ public class Sort { /** key为排序的名称, value为顺序 */ private Map<String, Order> field = new LinkedHashMap<String, Order>(); public Sort() { } public Sort(String key, Order order) { field.put(key, order); } public Sort on(String key, Order order) { field.put(key, order); return this; } public DBObject getSortObject() { DBObject dbo = new BasicDBObject(); for (String k : field.keySet()) { dbo.put(k, (field.get(k).equals(Order.ASC) ? 1 : -1)); } return dbo; } }
package com.x.mongodb; import com.mongodb.DBCursor; /** * 分页,排序处理 * @author <a href="http://blog.csdn.net/java2000_wl">java2000_wl</a> * @version <b>1.0</b> */ public interface CursorPreparer { DBCursor prepare(DBCursor cursor); }
package com.x.mongodb; import com.mongodb.DBObject; /** * 分页,排序对象 * @author <a href="http://blog.csdn.net/java2000_wl">java2000_wl</a> * @version <b>1.0</b> */ public class CursorObject { private int skip; private int limit; private Sort sort; public CursorObject skip(int skip) { this.skip = skip; return this; } public CursorObject limit(int limit) { this.limit = limit; return this; } public int getSkip() { return skip; } public int getLimit() { return limit; } public Sort sort() { if (this.sort == null) { this.sort = new Sort(); } return this.sort; } public DBObject getSortObject() { if (this.sort == null) { return null; } return this.sort.getSortObject(); } }