zoukankan      html  css  js  c++  java
  • MongoDB基本用法

    分享一下我经常用到的自己写的mongo用法示例

    该示例基于当前最新的mongo驱动,版本为mongo-2.10.1.jar,用junit写的单元测试。

    TestCase.java

    Java代码  收藏代码
    1. package com.wujintao.mongo;  
    2.   
    3. import java.net.UnknownHostException;  
    4. import java.util.ArrayList;  
    5. import java.util.List;  
    6. import java.util.Set;  
    7. import java.util.regex.Pattern;  
    8.   
    9. import org.junit.Test;  
    10.   
    11. import com.mongodb.AggregationOutput;  
    12. import com.mongodb.BasicDBList;  
    13. import com.mongodb.BasicDBObject;  
    14. import com.mongodb.BasicDBObjectBuilder;  
    15. import com.mongodb.DB;  
    16. import com.mongodb.DBCollection;  
    17. import com.mongodb.DBCursor;  
    18. import com.mongodb.DBObject;  
    19. import com.mongodb.MapReduceCommand;  
    20. import com.mongodb.MapReduceOutput;  
    21. import com.mongodb.Mongo;  
    22. import com.mongodb.QueryBuilder;  
    23. import com.mongodb.WriteConcern;  
    24.   
    25. public class TestCase {  
    26.        //DBCursor cursor = coll.find(condition).addOption(Bytes.QUERYOPTION_NOTIMEOUT);//设置游标不要超时  
    27.   
    28.     @Test  
    29.     /** 
    30.      * 获取所有数据库实例 
    31.      */  
    32.     public void testGetDBS() {  
    33.         List<String> dbnames = MongoUtil.getMong().getDatabaseNames();  
    34.         for (String dbname : dbnames) {  
    35.             System.out.println("dbname:" + dbname);  
    36.         }  
    37.     }  
    38.   
    39.     @Test  
    40.     /** 
    41.      * 删除数据库 
    42.      */  
    43.     public void dropDatabase() {  
    44.         MongoUtil.getMong().dropDatabase("my_new_db");  
    45.     }  
    46.   
    47.     @Test  
    48.     /** 
    49.      * 查询所有表名 
    50.      */  
    51.     public void getAllCollections() {  
    52.         Set<String> colls = MongoUtil.getDB().getCollectionNames();  
    53.         for (String s : colls) {  
    54.             System.out.println(s);  
    55.         }  
    56.     }  
    57.   
    58.     @Test  
    59.     public void dropCollection() {  
    60.         MongoUtil.getColl("jellonwu").drop();  
    61.     }  
    62.   
    63.     /** 
    64.      * 添加一条记录 
    65.      */  
    66.     @Test  
    67.     public void addData() {  
    68.         DBCollection coll = MongoUtil.getColl("wujintao");  
    69.         BasicDBObject doc = new BasicDBObject();  
    70.         doc.put("name", "MongoDB");  
    71.         doc.put("type", "database");  
    72.         doc.put("count", 1);  
    73.   
    74.         BasicDBObject info = new BasicDBObject();  
    75.         info.put("x", 203);  
    76.         info.put("y", 102);  
    77.         doc.put("info", info);  
    78.         coll.insert(doc);  
    79.         // 设定write concern,以便操作失败时得到提示  
    80.         coll.setWriteConcern(WriteConcern.SAFE);  
    81.     }  
    82.   
    83.     @Test  
    84.     /** 
    85.      * 创建索引 
    86.      */  
    87.     public void createIndex() {  
    88.         MongoUtil.getColl("wujintao").createIndex(new BasicDBObject("i", 1));  
    89.     }  
    90.   
    91.     @Test  
    92.     /** 
    93.      * 获取索引信息 
    94.      */  
    95.     public void getIndexInfo() {  
    96.         List<DBObject> list = MongoUtil.getColl("hems_online").getIndexInfo();  
    97.         for (DBObject o : list) {  
    98.             System.out.println(o);  
    99.         }  
    100.     }  
    101.   
    102.     @Test  
    103.     /** 
    104.      * 添加多条记录 
    105.      */  
    106.     public void addMultiData() {  
    107.         for (int i = 0; i < 100; i++) {  
    108.             MongoUtil.getColl("wujintao").insert(  
    109.                     new BasicDBObject().append("i", i));  
    110.         }  
    111.   
    112.         List<DBObject> docs = new ArrayList<DBObject>();  
    113.         for (int i = 0; i < 50; i++) {  
    114.             docs.add(new BasicDBObject().append("i", i));  
    115.         }  
    116.         MongoUtil.getColl("wujintao").insert(docs);  
    117.         // 设定write concern,以便操作失败时得到提示  
    118.         MongoUtil.getColl("wujintao").setWriteConcern(WriteConcern.SAFE);  
    119.     }  
    120.   
    121.     @Test  
    122.     /** 
    123.      * 查找第一条记录 
    124.      */  
    125.     public void findOne() {  
    126.         DBObject myDoc = MongoUtil.getColl("wujintao").findOne();  
    127.         System.out.println(myDoc);  
    128.     }  
    129.   
    130.     @Test  
    131.     /** 
    132.      * 获取表中所有记录条数 
    133.      */  
    134.     public void count() {  
    135.         System.out.println(MongoUtil.getColl("wujintao").getCount());  
    136.         System.out.println(MongoUtil.getColl("wujintao").count());  
    137.     }  
    138.   
    139.     @Test  
    140.     /** 
    141.      * 获取查询结果集的记录数 
    142.      */  
    143.     public void getCount() {  
    144.         DBObject query = new BasicDBObject("name", "a");  
    145.         long count = MongoUtil.getColl("wujintao").count(query);  
    146.         System.out.println(count);  
    147.     }  
    148.   
    149.     @Test  
    150.     /** 
    151.      * 查询所有结果 
    152.      */  
    153.     public void getAllDocuments() {  
    154.         DBCursor cursor = MongoUtil.getColl("wujintao").find();  
    155.         try {  
    156.             while (cursor.hasNext()) {  
    157.                 System.out.println(cursor.next());  
    158.             }  
    159.         } finally {  
    160.             cursor.close();  
    161.         }  
    162.     }  
    163.   
    164.     @Test  
    165.     /** 
    166.      * 按照一个条件查询 
    167.      */  
    168.     public void queryByConditionOne() {  
    169.         BasicDBObject query = new BasicDBObject();  
    170.         query.put("name", "MongoDB");  
    171.         DBCursor cursor = MongoUtil.getColl("wujintao").find(query);  
    172.   
    173.         try {  
    174.             while (cursor.hasNext()) {  
    175.                 System.out.println(cursor.next());  
    176.             }  
    177.         } finally {  
    178.             cursor.close();  
    179.         }  
    180.     }  
    181.   
    182.     @Test  
    183.     /** 
    184.      * AND多条件查询,区间查询 
    185.      */  
    186.     public void queryMulti() {  
    187.         BasicDBObject query = new BasicDBObject();  
    188.         // 查询j不等于3,k大于10的结果集  
    189.         query.put("j", new BasicDBObject("$ne", 3));  
    190.         query.put("k", new BasicDBObject("$gt", 10));  
    191.         DBCursor cursor = MongoUtil.getColl("wujintao").find(query);  
    192.         try {  
    193.             while (cursor.hasNext()) {  
    194.                 System.out.println(cursor.next());  
    195.             }  
    196.         } finally {  
    197.             cursor.close();  
    198.         }  
    199.     }  
    200.   
    201.     @Test  
    202.     /** 
    203.      * 区间查询 
    204.      * select * from table where i >50 
    205.      */  
    206.     public void queryMulti2() {  
    207.         BasicDBObject query = new BasicDBObject();  
    208.         query = new BasicDBObject();  
    209.         query.put("i", new BasicDBObject("$gt", 50)); // e.g. find all where i >  
    210.         DBCursor cursor = MongoUtil.getColl("wujintao").find(query);  
    211.         try {  
    212.             while (cursor.hasNext()) {  
    213.                 System.out.println(cursor.next());  
    214.             }  
    215.         } finally {  
    216.             cursor.close();  
    217.         }  
    218.     }  
    219.   
    220.     @Test  
    221.     /** 
    222.      * 区间查询 
    223.      * select * from table where 20 < i <= 30 
    224.         //比较符    
    225.         //"$gt": 大于    
    226.         //"$gte":大于等于    
    227.         //"$lt": 小于    
    228.         //"$lte":小于等于    
    229.         //"$in": 包含    
    230.      */  
    231.     public void queryMulti3() {  
    232.         BasicDBObject query = new BasicDBObject();  
    233.         query = new BasicDBObject();  
    234.   
    235.         query.put("i", new BasicDBObject("$gt", 20).append("$lte", 30));  
    236.         DBCursor cursor = MongoUtil.getColl("wujintao").find(query);  
    237.         try {  
    238.             while (cursor.hasNext()) {  
    239.                 System.out.println(cursor.next());  
    240.             }  
    241.         } finally {  
    242.             cursor.close();  
    243.         }  
    244.     }  
    245.   
    246.     /** 
    247.      * 组合in和and select * from test_Table where (a=5 or b=6) and (c=5 or d = 6) 
    248.      */  
    249.     public void queryMulti4() {  
    250.         BasicDBObject query11 = new BasicDBObject();  
    251.         query11.put("a", 1);  
    252.         BasicDBObject query12 = new BasicDBObject();  
    253.         query12.put("b", 2);  
    254.         List<BasicDBObject> orQueryList1 = new ArrayList<BasicDBObject>();  
    255.         orQueryList1.add(query11);  
    256.         orQueryList1.add(query12);  
    257.         BasicDBObject orQuery1 = new BasicDBObject("$or", orQueryList1);  
    258.   
    259.         BasicDBObject query21 = new BasicDBObject();  
    260.         query21.put("c", 5);  
    261.         BasicDBObject query22 = new BasicDBObject();  
    262.         query22.put("d", 6);  
    263.         List<BasicDBObject> orQueryList2 = new ArrayList<BasicDBObject>();  
    264.         orQueryList2.add(query21);  
    265.         orQueryList2.add(query22);  
    266.         BasicDBObject orQuery2 = new BasicDBObject("$or", orQueryList2);  
    267.   
    268.         List<BasicDBObject> orQueryCombinationList = new ArrayList<BasicDBObject>();  
    269.         orQueryCombinationList.add(orQuery1);  
    270.         orQueryCombinationList.add(orQuery2);  
    271.   
    272.         BasicDBObject finalQuery = new BasicDBObject("$and",  
    273.                 orQueryCombinationList);  
    274.         DBCursor cursor = MongoUtil.getColl("wujintao").find(finalQuery);  
    275.     }  
    276.   
    277.     @Test  
    278.     /** 
    279.      * IN查询 
    280.      * if i need to query name in (a,b); just use { name : { $in : ['a', 'b'] } } 
    281.      * select * from things where name='a' or name='b' 
    282.      * @param coll 
    283.      */  
    284.     public void queryIn() {  
    285.         BasicDBList values = new BasicDBList();  
    286.         values.add("a");  
    287.         values.add("b");  
    288.         BasicDBObject in = new BasicDBObject("$in", values);  
    289.         DBCursor cursor = MongoUtil.getColl("wujintao").find(  
    290.                 new BasicDBObject("name", in));  
    291.         try {  
    292.             while (cursor.hasNext()) {  
    293.                 System.out.println(cursor.next());  
    294.             }  
    295.         } finally {  
    296.             cursor.close();  
    297.         }  
    298.     }  
    299.   
    300.     @Test  
    301.     /** 
    302.      * 或查询 
    303.      * select * from table where name  = '12' or title = 'p' 
    304.      * @param coll 
    305.      */  
    306.     public void queryOr() {  
    307.         QueryBuilder query = new QueryBuilder();  
    308.         query.or(new BasicDBObject("name", 12), new BasicDBObject("title", "p"));  
    309.         DBCursor cursor = MongoUtil.getColl("wujintao").find(query.get()).addSpecial("$returnKey", "");  
    310.         try {  
    311.             while (cursor.hasNext()) {  
    312.                 System.out.println(cursor.next());  
    313.             }  
    314.         } finally {  
    315.             cursor.close();  
    316.         }  
    317.     }  
    318.       
    319.     @Test  
    320.     public void customQueryField() throws UnknownHostException{  
    321.         Mongo mongo = new Mongo("localhost", 27017);  
    322.         DB db = mongo.getDB("zhongsou_ad");  
    323.         BasicDBObjectBuilder bulder = new BasicDBObjectBuilder();  
    324.         bulder.add("times",1);  
    325.         bulder.add("aid",1);  
    326.         DBCursor cusor =  db.getCollection("ad_union_ad_c_1").find(new BasicDBObject(),bulder.get());  
    327.         for (DBObject dbObject : cusor) {  
    328.             System.out.println(dbObject);  
    329.         }  
    330.     }  
    331.       
    332.     @Test  
    333.     public void mapReduce() throws UnknownHostException{  
    334.         Mongo mongo = new Mongo("localhost", 27017);  
    335.         DB db = mongo.getDB("zhongsou_ad");  
    336.         /*** 
    337.          *  book1 = {name : "Understanding JAVA", pages : 100} 
    338.          *  book2 = {name : "Understanding JSON", pages : 200} 
    339.          *  db.books.save(book1) 
    340.          *  db.books.save(book2) 
    341.          *  book = {name : "Understanding XML", pages : 300} 
    342.          *  db.books.save(book) 
    343.          *  book = {name : "Understanding Web Services", pages : 400} 
    344.          *  db.books.save(book) 
    345.          *  book = {name : "Understanding Axis2", pages : 150} 
    346.          *  db.books.save(book)   
    347.          *   
    348.         var map = function() { 
    349.             var category; 
    350.             if ( this.pages >= 250 ) 
    351.                 category = 'Big Books'; 
    352.             else 
    353.                 category = "Small Books"; 
    354.             emit(category, {name: this.name}); 
    355.         }; 
    356.         var reduce = function(key, values) { 
    357.             var sum = 0; 
    358.             values.forEach(function(doc) { 
    359.                 sum += 1; 
    360.             }); 
    361.             return {books: sum}; 
    362.         };        
    363.         var count  = db.books.mapReduce(map, reduce, {out: "book_results"}); 
    364.          */  
    365.         try {  
    366.   
    367.             DBCollection books = db.getCollection("books");  
    368.   
    369.             BasicDBObject book = new BasicDBObject();  
    370.             book.put("name", "Understanding JAVA");  
    371.             book.put("pages", 100);  
    372.             books.insert(book);  
    373.               
    374.             book = new BasicDBObject();    
    375.             book.put("name", "Understanding JSON");  
    376.             book.put("pages", 200);  
    377.             books.insert(book);  
    378.               
    379.             book = new BasicDBObject();  
    380.             book.put("name", "Understanding XML");  
    381.             book.put("pages", 300);  
    382.             books.insert(book);  
    383.               
    384.             book = new BasicDBObject();  
    385.             book.put("name", "Understanding Web Services");  
    386.             book.put("pages", 400);  
    387.             books.insert(book);  
    388.             
    389.             book = new BasicDBObject();  
    390.             book.put("name", "Understanding Axis2");  
    391.             book.put("pages", 150);  
    392.             books.insert(book);  
    393.               
    394.             String map = "function() { "+   
    395.                       "var category; " +    
    396.                       "if ( this.pages >= 250 ) "+    
    397.                       "category = 'Big Books'; " +  
    398.                       "else " +  
    399.                       "category = 'Small Books'; "+    
    400.                       "emit(category, {name: this.name});}";  
    401.               
    402.             String reduce = "function(key, values) { " +  
    403.                                      "var sum = 0; " +  
    404.                                      "values.forEach(function(doc) { " +  
    405.                                      "sum += 1; "+  
    406.                                      "}); " +  
    407.                                      "return {books: sum};} ";  
    408.               
    409.             MapReduceCommand cmd = new MapReduceCommand(books, map, reduce,  
    410.               null, MapReduceCommand.OutputType.INLINE, null);  
    411.   
    412.             MapReduceOutput out = books.mapReduce(cmd);  
    413.   
    414.             for (DBObject o : out.results()) {  
    415.              System.out.println(o.toString());  
    416.             }  
    417.            } catch (Exception e) {  
    418.              e.printStackTrace();  
    419.            }  
    420.     }  
    421.       
    422.     @Test  
    423.     public void GroupByManyField() throws UnknownHostException{  
    424.         //此方法没有运行成功  
    425.         Mongo mongo = new Mongo("localhost", 27017);  
    426.         DB db = mongo.getDB("libary");  
    427.         DBCollection books = db.getCollection("books");  
    428.         BasicDBObject groupKeys = new BasicDBObject();  
    429.         groupKeys.put("total", new BasicDBObject("$sum","pages"));  
    430.           
    431.         BasicDBObject condition = new BasicDBObject();  
    432.         condition.append("pages", new BasicDBObject().put("$gt", 0));  
    433.      
    434.           
    435.         String reduce = "function(key, values) { " +  
    436.                 "var sum = 0; " +  
    437.                 "values.forEach(function(doc) { " +  
    438.                 "sum += 1; "+  
    439.                 "}); " +  
    440.                 "return {books: sum};} ";  
    441.         /** 
    442.          BasicDBList basicDBList = (BasicDBList)db.getCollection("mongodb中集合编码或者编码") 
    443.                    .group(DBObject key,   --分组字段,即group by的字段 
    444.                 DBObject cond,        --查询中where条件 
    445.                 DBObject initial,     --初始化各字段的值 
    446.                 String reduce,        --每个分组都需要执行的Function 
    447.                 String finial         --终结Funciton对结果进行最终的处理 
    448.          */  
    449.         DBObject obj = books.group(groupKeys, condition,  new BasicDBObject(), reduce);  
    450.         System.out.println(obj);  
    451.           
    452.         AggregationOutput ouput = books.aggregate(new BasicDBObject("$group",groupKeys));  
    453.         System.out.println(ouput.getCommandResult());  
    454.         System.out.println(books.find(new BasicDBObject("$group",groupKeys)));  
    455.     }     
    456.       
    457.   
    458.     @Test  
    459.     /** 
    460.      * 分页查询    
    461.      */  
    462.     public void pageQuery() {  
    463.         DBCursor cursor = MongoUtil.getColl("wujintao").find().skip(0)  
    464.                 .limit(10);  
    465.         while (cursor.hasNext()) {  
    466.             System.out.println(cursor.next());  
    467.         }  
    468.     }  
    469.   
    470.     /** 
    471.      * 模糊查询 
    472.      */  
    473.     public void likeQuery() {  
    474.         Pattern john = Pattern.compile("joh?n");  
    475.         BasicDBObject query = new BasicDBObject("name", john);  
    476.   
    477.         // finds all people with "name" matching /joh?n/i  
    478.         DBCursor cursor = MongoUtil.getColl("wujintao").find(query);  
    479.     }  
    480.   
    481.     @Test  
    482.     /** 
    483.      * 条件删除    
    484.      */  
    485.     public void delete() {  
    486.         BasicDBObject query = new BasicDBObject();  
    487.         query.put("name", "xxx");  
    488.         // 找到并且删除,并返回删除的对象  
    489.         DBObject removeObj = MongoUtil.getColl("wujintao").findAndRemove(query);  
    490.         System.out.println(removeObj);  
    491.     }  
    492.   
    493.     @Test  
    494.     /** 
    495.      * 更新 
    496.      */  
    497.     public void update() {  
    498.         BasicDBObject query = new BasicDBObject();  
    499.         query.put("name", "liu");  
    500.         DBObject stuFound = MongoUtil.getColl("wujintao").findOne(query);  
    501.         stuFound.put("name", stuFound.get("name") + "update_1");  
    502.         MongoUtil.getColl("wujintao").update(query, stuFound);  
    503.     }  
    504.   
    505.   
    506. }  

    这里面涉及到的MongoUtil.java如下:

    Java代码  收藏代码
    1. package com.wujintao.mongo;  
    2.   
    3. import java.net.UnknownHostException;  
    4.   
    5. import org.apache.commons.logging.Log;  
    6. import org.apache.commons.logging.LogFactory;  
    7.   
    8. import com.mongodb.DB;  
    9. import com.mongodb.DBCollection;  
    10. import com.mongodb.Mongo;  
    11.   
    12.   
    13. /** 
    14.  * to see:http://www.mongodb.org/display/DOCS/Java+Driver+Concurrency 
    15.  * Mongo工具类:设计为单例模式,每当月份发生变化,数据库连接名称就会发生变化,这是业务规则 
    16.  * 因 MongoDB的Java驱动是线程安全的,对于一般的应用,只要一个Mongo实例即可,Mongo有个内置的连接池(池大小默认为10个)。 
    17.  * 对于有大量写和读的环境中,为了确保在一个Session中使用同一个DB时,我们可以用以下方式保证一致性: 
    18.  *   DB mdb = mongo.getDB('dbname'); 
    19.  *   mdb.requestStart(); 
    20.  *   // 业务代码 
    21.  *   mdb.requestDone(); 
    22.  * DB和DBCollection是绝对线程安全的 
    23.  * @author wujintao 
    24.  */  
    25. public class MongoUtil{  
    26.       
    27.     private static Mongo mongo;  
    28.     private static DBCollection coll;  
    29.     private static Log log = LogFactory.getLog(MongoUtil.class);  
    30.     private static DB db;  
    31.       
    32.     static{  
    33.         try {  
    34.               MongoOptions options = new MongoOptions();  
    35.                       options.autoConnectRetry = true;  
    36.                       options.connectionsPerHost = 1000;  
    37.                       options.maxWaitTime = 5000;  
    38.                       options.socketTimeout = 0;  
    39.                       options.connectTimeout = 15000;  
    40.                       options.threadsAllowedToBlockForConnectionMultiplier = 5000;  
    41.             //事实上,Mongo实例代表了一个数据库连接池,即使在多线程的环境中,一个Mongo实例对我们来说已经足够了  
    42.             mongo = new Mongo(new ServerAddress(DBMongoConfig.getHost(),DBMongoConfig.getPort()),options);  
    43.             //mongo = new Mongo(DBMongoConfig.getHost(),DBMongoConfig.getPort());  
    44.             // or, to connect to a replica set, supply a seed list of members  
    45.             // Mongo m = new Mongo(Arrays.asList(new ServerAddress("localhost",  
    46.             // 27017),  
    47.             // new ServerAddress("localhost", 27018),  
    48.             // new ServerAddress("localhost", 27019)));  
    49.   
    50.             // 注意Mongo已经实现了连接池,并且是线程安全的。  
    51.             // 大部分用户使用mongodb都在安全内网下,但如果将mongodb设为安全验证模式,就需要在客户端提供用户名和密码:  
    52.             // boolean auth = db.authenticate(myUserName, myPassword);  
    53.         } catch (UnknownHostException e) {  
    54.             log.info("get mongo instance failed");  
    55.         }  
    56.     }  
    57.       
    58.     public static DB getDB(){  
    59.         if(db==null){  
    60.             db = mongo.getDB(DBMongoConfig.getDbname());  
    61.         }  
    62.         return db;  
    63.     }  
    64.       
    65.       
    66.     public static Mongo getMong(){  
    67.         return mongo;  
    68.     }  
    69.       
    70.     public static DBCollection getColl(String collname){  
    71.         return getDB().getCollection(collname);  
    72.     }  
    73.       
    74. }
  • 相关阅读:
    OC学习笔记
    feed43+ifttt
    让Hyper-V和VMware虚拟机软件共存
    ios问题集
    vs2012问题集
    第二个win8应用制作笔记
    隐私策略
    《龙泉青瓷》隐私策略
    win8开发-Xaml学习笔记四
    梦想成为“老板”的第N天
  • 原文地址:https://www.cnblogs.com/shijiaoyun/p/4711092.html
Copyright © 2011-2022 走看看