Mongodb底層java驅動框架工具類使用

jopen 10年前發布 | 29K 次閱讀 MongoDB NoSQL數據庫

使用MongoDB需要對文檔結構進行合理的設計,以滿足某些特定需求。比如隨機選取文檔,使用skip跳過隨機個文檔就沒有在文檔中加個隨機鍵,

然后使用某個隨機數對文檔進行查詢高效,隨機鍵還能添加索引,效率更高。合理選擇,合理設計。

    import java.net.UnknownHostException;
import java.util.Date;
import java.util.List;

import com.mongodb.BasicDBList;  
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;  
import com.nerd.mongo.config.ConfigFactory;  
/** 
 * MONGOS 
 * @author chenlongquan 
 * 
 */  
public class MongoUtil {  

    private final static ThreadLocal<Mongo> mongos = new ThreadLocal<Mongo>();  

    public static DB getdb(){  
        return getMongos().getDB(ConfigFactory.getMongoConfig().getDb());  
    }  

    public static Mongo getMongos() {  
        Mongo mongo = mongos.get();  
        if (mongo == null) {  
            try {  
                mongo = new Mongo(ConfigFactory.getMongoConfig().getIp(),ConfigFactory.getMongoConfig().getPort());  
                mongos.set(mongo);  
            } catch (UnknownHostException e) {  
                e.printStackTrace();  
            } catch (MongoException e) {  
                e.printStackTrace();  
            }  
        }  
        return mongo;  
    }  

    public static void close(){  
        Mongo mongo = mongos.get();  
        if(mongo!=null){  
            mongo.close();  
            mongos.remove();  
        }  
    }  


    /** 
     * 獲取集合(表) 
     *  
     * @param collection 
     */  
    public static DBCollection getCollection(String collection) {  

        return getdb().getCollection(collection);  
    }  
......................................................  </pre><a style="text-indent:0px;" title="派生到我的代碼片" href="/misc/goto?guid=4959620647803020208" target="_blank"></a></div>

</div>

    </div> 下面我們就可以在這上面的基礎上對mongodb進行基本的crud操作

    例如:

        /**

         * 插入 
         *  
         * @param collection 
         * @param o 插入 
         *     
         */  
        public static void insert(String collection, DBObject o) {  
    
            getCollection(collection).insert(o);  
        }  
    
        /** 
         * 批量插入 
         *  
         * @param collection 
         * @param list 
         *            插入的列表 
         */  
        public void insertBatch(String collection, List<DBObject> list) {  
    
            if (list == null || list.isEmpty()) {  
                return;  
            }  
    
            getCollection(collection).insert(list);  
    
        }  </pre><a style="text-indent:0px;" title="派生到我的代碼片" href="/misc/goto?guid=4959620647803020208" target="_blank"></a></div>
    

    </div>

      </div>
      測試用例:
          insert("user1",  
                          new BasicDBObject().append("name", "admin3").append("type", "2").append("score", 70)  
                               .append("level", 2).append("inputTime", new Date().getTime()));  

      工具類使用:

      /**

       * 刪除 
       *  
       * @param collection 
       * @param q 
       *            查詢條件 
       */  
      public void delete(String collection, DBObject q) {  
      
          getCollection(collection).remove(q);  
      }  
      
      /** 
       * 批量刪除 
       *  
       * @param collection 
       * @param list 
       *            刪除條件列表 
       */  
      public void deleteBatch(String collection, List<DBObject> list) {  
      
          if (list == null || list.isEmpty()) {  
              return;  
          }  
      
          for (int i = 0; i < list.size(); i++) {  
              getCollection(collection).remove(list.get(i));  
          }  
      }  
      
      
      /** 
       * 更新 
       *  
       * @param collection 
       * @param q 
       *            查詢條件 
       * @param setFields 
       *            更新對象 
       */  
      public static void update(String collection, DBObject q, DBObject setFields) {  
      
          getCollection(collection).updateMulti(q,  
                  new BasicDBObject("$set", setFields));  
      }  
      
      /** 
       * 查找集合所有對象 
       *  
       * @param collection 
       */  
      public static List<DBObject> findAll(String collection) {  
      
          return getCollection(collection).find().toArray();  
      }  
      
      /** 
       * 按順序查找集合所有對象 
       *  
       * @param collection 
       *            數據集 
       * @param orderBy 
       *            排序 
       */  
      public static List<DBObject> findAll(String collection, DBObject orderBy) {  
      
          return getCollection(collection).find().sort(orderBy)  
                  .toArray();  
      }  
      
      /** 
       * 查找(返回一個對象) 
       *  
       * @param collection 
       * @param q 
       *            查詢條件 
       */  
      public static DBObject findOne(String collection, DBObject q) {  
      
          return getCollection(collection).findOne(q);  
      }  
      
      /** 
       * 查找(返回一個對象) 
       *  
       * @param collection 
       * @param q 
       *            查詢條件 
       * @param fileds 
       *            返回字段 
       */  
      public static DBObject findOne(String collection, DBObject q, DBObject fileds) {  
      
          return getCollection(collection).findOne(q, fileds);  
      }  
      
      
      
      /** 
       * 分頁查找集合對象,返回特定字段 
       *  
       * @param collection 
       * @param q 
       *            查詢條件 
       * @param fileds 
       *            返回字段 
       * @pageNo 第n頁 
       * @perPageCount 每頁記錄數 
       */  
      public static List<DBObject> findLess(String collection, DBObject q, DBObject fileds, int pageNo,  
              int perPageCount) {  
      
          return getCollection(collection).find(q, fileds)  
                  .skip((pageNo - 1) * perPageCount).limit(perPageCount)  
                  .toArray();  
      }  </pre><a style="text-indent:0px;" title="派生到我的代碼片" href="/misc/goto?guid=4959620647803020208" target="_blank"></a></div>
      

      </div>

        </div> 來自:http://blog.csdn.net/u012516914/article/details/41801573

         本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
         轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
         本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!