mongoDB入门(转)

转自:http://zhangxxheng.iteye.com  转载请注明出

心血来潮,看了看mongoDB 的相关内容,写了个入门级的demo.用来备忘!

一:如何安装mongoDB服务

1.下载mongodb的windows版本,有32位和64位版本,根据系统情况下载,下载地址:htp://www.mongodb.org/downloads 我这里的是 32 的

2.解压缩至F:/mongodb即可(这个位置 可以随便,就像平时安装软件解压一样没有特殊的要求)

3.创建数据库文件的存放位置,比如E:/mongodb/data/db。启动mongodb服务之前需要必须创建数据库文件的存放文件夹,否则命令不会自动创建,而且不能启动成功。默认文件夹路径为c:/data/db.使用系统默认文件夹路径时,启动服务无需加--dbpath 参数说明,但文件夹还要手工创建

4.打开cmd命令行,进入D:/mongodb/bin目录,输入如下的命令启动mongodb服务:

D:\Program Files\mongodb\bin>mongod.exe --dbpath D:/mongodb/data/db (此处注意是mongod.exe  不是 mongo.exe  )

输入命令后屏幕上会显示 如下内容表示启动mongo服务成功了,如果要关闭该服务只需要关闭显示这些内容的窗口就行了。

 

Fri Aug 09 09:14:44 [initandlisten] MongoDB starting : pid=3708 port=27017 dbp

h=D:/mongodb/data/db 32-bit

 

** NOTE: when using MongoDB 32 bit, you are limited to about 2 gigabytes of da

 

**       see http://blog.mongodb.org/post/137788967/32-bit-limitations

**       with --dur, the limit is lower

 

Fri Aug 09 09:14:44 [initandlisten] db version v1.8.5, pdfile version 4.5

Fri Aug 09 09:14:44 [initandlisten] git version: 403c8dadcd56f68dcbe06013ecbfa

7b32a22ac

Fri Aug 09 09:14:44 [initandlisten] build sys info: windows sys.getwindowsvers

n(major=6, minor=0, build=6002, platform=2, service_pack='Service Pack 2') BOO

_LIB_VERSION=1_42

Fri Aug 09 09:14:44 [initandlisten] waiting for connections on port 27017

Fri Aug 09 09:14:44 [websvr] web admin interface listening on port 28017

Fri Aug 09 09:15:12 [initandlisten] connection accepted from 127.0.0.1:3059 #1

Fri Aug 09 09:15:12 [conn1] query zh.$cmd ntoreturn:1 command: { count: "testC

llection", query: {} } reslen:64 138ms

Fri Aug 09 09:15:12 [conn1] end connection 127.0.0.1:3059

Fri Aug 09 09:15:35 [initandlisten] connection accepted from 127.0.0.1:3060 #2

Fri Aug 09 09:15:35 [conn2] end connection 127.0.0.1:3060

Fri Aug 09 09:16:15 [initandlisten] connection accepted from 127.0.0.1:3061 #3

Fri Aug 09 09:16:15 [conn3] end connection 127.0.0.1:3061

Fri Aug 09 09:21:37 [initandlisten] connection accepted from 127.0.0.1:3085 #4

Fri Aug 09 09:21:37 [conn4] end connection 127.0.0.1:3085

Fri Aug 09 09:29:39 [initandlisten] connection accepted from 127.0.0.1:3124 #5

Fri Aug 09 09:29:39 [conn5] end connection 127.0.0.1:3124

到这里 就表示启动服务成功了,当然你下次开机或者关闭了这个窗口的时候 ,需要使用就必须再次使用启动服务的命令。

二:入门开发:

在进行开发之前需要导入包 :mongo-2.10.1.jar

我这里有jar包,案例代码,pdf学习手册。

接下来可以进行开发了。

Java代码   收藏代码
  1. package com.cyou.mongdb.test;  
  2.   
  3. import java.net.UnknownHostException;  
  4. import java.util.ArrayList;  
  5. import java.util.HashMap;  
  6. import java.util.List;  
  7. import java.util.Map;  
  8.   
  9. import com.mongodb.BasicDBObject;  
  10. import com.mongodb.BasicDBObjectBuilder;  
  11. import com.mongodb.DB;  
  12. import com.mongodb.DBCollection;  
  13. import com.mongodb.DBCursor;  
  14. import com.mongodb.DBObject;  
  15. import com.mongodb.Mongo;  
  16.   
  17. public class MongoUser {  
  18.   
  19.       private Mongo mongo = null;  
  20.       private DB db = null;  
  21.       private DBCollection conllection = null;  
  22.   
  23.       /** 
  24.        * init:初始化mongo. <br/> 
  25.        *  
  26.        * @author zhangheng 
  27.        * @param host 主机 
  28.        * @param port 端口号 
  29.        * @since JDK 1.6 
  30.        */  
  31.       public void init(String host, int port, String dbName, String collectionName){  
  32.         try {  
  33.           if (mongo == null) {  
  34.             // 是使用本地地址和默认端口号相当于//mg = new Mongo("localhost", 27017)  
  35.             mongo = new Mongo();  
  36.           }  
  37.   
  38.         } catch (UnknownHostException e) {  
  39.           // TODO Auto-generated catch block  
  40.           e.printStackTrace();  
  41.         }  
  42.         // 获取temp DB;如果默认没有创建,mongodb会自动创建  
  43.         db = mongo.getDB(dbName);  
  44.         // 获取users DBCollection;如果默认没有创建,mongodb会自动创建  
  45.         conllection = db.getCollection(collectionName);  
  46.       }  
  47.   
  48.       /** 
  49.        * destroy:销毁mongo对象. <br/> 
  50.        *  
  51.        * @author zhangheng 
  52.        * @since JDK 1.6 
  53.        */  
  54.       public void destroy(){  
  55.         if (mongo != null) {  
  56.           mongo.close();  
  57.           mongo = null;  
  58.           db = null;  
  59.           conllection = null;  
  60.           // 通知垃圾回收机制回收  
  61.           System.gc();  
  62.         }  
  63.       }  
  64.   
  65.       public DBObject getBDbObject(){  
  66.         return null;  
  67.       }  
  68.   
  69.       /** 
  70.        * add:添加一个记录. <br/> 
  71.        *  
  72.        * @author zhangheng 
  73.        * @since JDK 1.6 
  74.        */  
  75.       //通过BasicDBObject的方式向mongo中插入数据  
  76.       public void addToBasicDBObject(BasicDBObject document,DBCollection dbCollection){  
  77.           dbCollection .insert(document);  
  78.       }  
  79.     //通过BasicDBObjectBuilder的方式向mongo中插入数据  
  80.       public void addToBasicDBObjectBuilder(BasicDBObjectBuilder document,DBCollection dbCollection){  
  81.           dbCollection .insert(document.get());  
  82.       }  
  83.       //通过Map的方式向mongo中插入数据  
  84.       public void addToMap(Map documentMap,DBCollection dbCollection){  
  85.           dbCollection .insert(new BasicDBObject(documentMap));  
  86.       }  
  87.       /** 
  88.        * cursorIterator:根据游标的位置输出遍历的集合. <br/> 
  89.        *  
  90.        * @author zhangheng 
  91.        * @param cur 
  92.        * @since JDK 1.6 
  93.        */  
  94.       public void cursorIterator(DBCursor cur){  
  95.         while (cur.hasNext()) {  
  96.           System.out.println(cur.next());  
  97.         }  
  98.       }  
  99.   
  100.       /** 
  101.        * queryAll:查询集合中的所有元素). <br/> 
  102.        *  
  103.        * @author zhangheng 
  104.        * @param dbCollection 
  105.        * @return 
  106.        * @since JDK 1.6 
  107.        */  
  108.       public DBCursor queryAll(DBCollection dbCollection){  
  109.         DBCursor cur = dbCollection.find();  
  110.         return cur;  
  111.       }  
  112.   
  113.       /** 
  114.        * getCount:获得文档中的记录条数. <br/> 
  115.        *  
  116.        * @author zhangheng 
  117.        * @param collection 
  118.        * @return 
  119.        * @since JDK 1.6 
  120.        */  
  121.       public long getCount(DBCollection collection){  
  122.         return collection.count();  
  123.       }  
  124.   
  125.       /** 
  126.        * remove:根据DBCollection对象从集合中删除对象. <br/> 
  127.        *  
  128.        * @author zhangheng 
  129.        * @param dbObject 纪录 
  130.        * @param dbCollection 集合名 
  131.        * @since JDK 1.6 
  132.        */  
  133.       public void remove(DBObject dbObject, DBCollection dbCollection){  
  134.         dbCollection.remove(dbObject);  
  135.       }  
  136.         
  137.         
  138.       //更新  
  139.       public void update(BasicDBObject frontDBObject,BasicDBObject afartDBObject,DBCollection dbCollection){  
  140.           dbCollection.update(frontDBObject,afartDBObject);  
  141.       }  
  142.         // 第三个参数-----如果数据库不存在,是否添加  
  143.         // 第四个参数-----多条修改false  
  144.       public void motify(BasicDBObject frontDBObject, BasicDBObject afartDBObject,  
  145.           DBCollection dbCollection,boolean isExist,boolean allMotify){  
  146.         dbCollection.update(frontDBObject, afartDBObject, isExist, allMotify);  
  147.       }  
  148.   
  149.       /** 
  150.        * find:根据DBCollection查找. <br/> 
  151.        *  
  152.        * @author zhangheng 
  153.        * @param dbObject 
  154.        * @param dbCollection 
  155.        * @return 
  156.        * @since JDK 1.6 
  157.        */  
  158.       public DBCursor getDocument(BasicDBObject dbObject, DBCollection dbCollection){  
  159.         return dbCollection.find(dbObject);  
  160.       }  
  161.         
  162.       //获得第一条记录  
  163.       public DBObject getFirstDocument(DBCollection dbCollection){  
  164.           return dbCollection.findOne();  
  165.       }  
  166.       /** 
  167.        * setReadOnly:设置数据库是否为可读. <br/> 
  168.        *  
  169.        * @author zhangheng 
  170.        * @param db 数据库 
  171.        * @param bo true/false 
  172.        * @since JDK 1.6 
  173.        */  
  174.       public void setReadOnly(DB db, boolean bo){  
  175.         db.setReadOnly(bo);  
  176.       }  
  177.   
  178.       public Mongo getMongo(){  
  179.         return mongo;  
  180.       }  
  181.   
  182.       public DB getDb(String dbName){  
  183.         return db;  
  184.       }  
  185.   
  186.       public DBCollection getUsers(){  
  187.         return conllection;  
  188.       }  
  189.   
  190.         
  191.     }  

接下来我在这个类中建立里 main方法 用来测试。

添加的方法 ,把数据添加到数据库中

Java代码   收藏代码
  1. /** 
  2.        * main:进行一些测试. <br/> 
  3.        *  
  4.        * @author zhangheng 
  5.        * @param args 
  6.        * @since JDK 1.6 
  7.        */  
  8.       public static void main(String[] args){  
Java代码   收藏代码
  1. try {  
  2.     mongoTest = new MongoUser();  
  3.     mongoTest.init(null, 0, "zh", "testConllection");  
  4.   
  5.     System.out.println("集合中文档的数量"+mongoTest.getCount(mongoTest.conllection));  
  6.     System.out.println("==========================================================");  
  7.     //添加  
  8.     BasicDBObject document =   new BasicDBObject();  
  9.     document.put("name", "zhang");  
  10.     document.put("age", 20);  
  11.     document.put("sex", "famale");  
  12.     document.put("isStudents", true);  
  13.     mongoTest.addToBasicDBObject(document, mongoTest.conllection);  
  14.       
  15.     BasicDBObjectBuilder  document1 =   new BasicDBObjectBuilder ();  
  16.     document1.append("name", "li").append("age", 22).append("sex", "male").append("isStudents", true);  
  17.     mongoTest.addToBasicDBObjectBuilder(document1, mongoTest.conllection);  
  18.       
  19.     Map<String ,Object> document2 = new HashMap<String,Object>();  
  20.     document2.put("name", "zhang");  
  21.     document2.put("age", 21);  
  22.     document2.put("sex", "famale");  
  23.     document2.put("isStudents", true);  
  24.     mongoTest.addToMap(document2, mongoTest.conllection);  
  25.   
  26.   
  27. } catch (Exception e) {  
  28. } finally {  
  29.     mongoTest.destroy();  
  30. }  
Java代码   收藏代码
  1. 接下来分别是 查找 修改 删除 的测试在进行这些测试之前我 前调用了显示 全部记录的方法可以清晰的看见操作的结果。   
Java代码   收藏代码
  1. //输出所有的数据信息   
  2.  DBCursor dbc =  mongoTest.queryAll(mongoTest.conllection);  
  3.  System.out.println("输出所有记录:");  
  4.  mongoTest.cursorIterator(dbc);    
Java代码   收藏代码
  1.  查找的方法有一般有这几种,还有的没有列出来。  
Java代码   收藏代码
  1. //查找  
  2.             //获得第一个位置上的记录  
  3.             DBObject getFirstOne = mongoTest.getFirstDocument(mongoTest.conllection);  
  4.             System.out.println("获得第一条记录"+getFirstOne.toString());  
  5.               
  6.             System.out.println("===================");  
  7.             //根据指定的条件查询相应的值 此处为查询name 为 li 的记录 相当于sql中where 列= **;  
  8.             BasicDBObject query1 = new BasicDBObject();  
  9.             query1.put("name", "li");  
  10.             DBCursor dbCursor1 =mongoTest.getDocument(query1, mongoTest.conllection);  
  11.             while(dbCursor1.hasNext()){  
  12.                 System.out.println("根据条件查询 ---1:"+dbCursor1.next());  
  13.             }  
  14.               
  15.             System.out.println("===================");  
  16.             //查询  介于 年龄在20 和 22 的 记录,相当于sql中的 where 条件中的in   
  17.             BasicDBObject query2 = new BasicDBObject();  
  18.             List list = new ArrayList();  
  19.             list.add(22);  
  20.             list.add(20);  
  21.             query2.put("age", new BasicDBObject("$in",list));   
  22.             DBCursor dbCursor2 =mongoTest.getDocument(query2, mongoTest.conllection);  
  23.             while(dbCursor2.hasNext()){  
  24.                 System.out.println("根据条件查询 ---2"+dbCursor2.next());  
  25.             }  
  26.               
  27.               
  28.             System.out.println("===================");  
  29.             //根据大于小于查询  ">" (大于号) "$gt"  "<"(小于号)"$lt"   
  30.             //查询年龄大于21的值  
  31.             BasicDBObject query3 = new BasicDBObject();  
  32.             query3.put("age", new BasicDBObject("$gt",21));   
  33.             DBCursor dbCursor3 =mongoTest.getDocument(query3, mongoTest.conllection);  
  34.             while(dbCursor3.hasNext()){  
  35.                 System.out.println("根据条件查询 ---3"+dbCursor3.next());  
  36.             }  
  37.             //查询年龄大于20 小于 22的值  
  38.             BasicDBObject query4 = new BasicDBObject();  
  39.             query4.put("age", new BasicDBObject("$gt",20).append("$lt", 22));   
  40.             DBCursor dbCursor4 =mongoTest.getDocument(query4, mongoTest.conllection);  
  41.             while(dbCursor4.hasNext()){  
  42.                 System.out.println("根据条件查询 ---4"+dbCursor4.next());  
  43.             }  
Java代码   收藏代码
  1.    
  2. 修改   
Java代码   收藏代码
  1. System.out.println("===================");  
  2. //更新  
  3. //如果是更新整条数据的话,需要把所有的属性都要更新。如果其中的某个属性不写 的话 就是认为去掉该属性  
  4.   
  5. BasicDBObject update1 =new BasicDBObject();  
  6. update1.put("name", "lily");  
  7. update1.put("age", 5);  
  8. update1.put("sex", "male");  
  9. update1.put("isStudents", false);  
  10. mongoTest.update(new BasicDBObject().append("name", "lily"), update1,mongoTest.conllection);  
  11.   
  12. //在原来属性的基础添加值 更新 使用  "$inc"  类似于大于小于的比较  
  13. BasicDBObject update2 = new  BasicDBObject().append("$inc", new BasicDBObject().append("age", 7));  
  14. mongoTest.update(new BasicDBObject().append("name", "lily"), update2,mongoTest.conllection);  
  15.   
  16.   
  17. //利用set  改变某一属性的 值  
  18. BasicDBObject update3 = new  BasicDBObject().append("$set", new BasicDBObject().append("isStudents", true));  
  19. mongoTest.update(new BasicDBObject().append("name", "lily"), update3,mongoTest.conllection);  
Java代码   收藏代码
  1.  删除 删除的方法写的比较简单。因为跟查找很像。$lt 表示 小于 前面说过  
Java代码   收藏代码
  1. //删除 方法和 查找方法极为类似   
  2.             BasicDBObject remove1 = new BasicDBObject();  
  3.             remove1.put("age", new BasicDBObject("$lt",20));  
  4.             mongoTest.remove(remove1, mongoTest.conllection);  
Java代码   收藏代码
  1.    
  2. 删除数据库中所有的记录,我用的方法是 查出来所有记录逐一删除  
Java代码   收藏代码
  1. //先查询出所有的内容然后 删除  
  2.           DBCursor dbc1 =  mongoTest.queryAll(mongoTest.conllection);  
  3.           while(dbc1.hasNext()){  
  4.               mongoTest.remove(dbc1.next(), mongoTest.conllection);  
  5.           }  
Java代码   收藏代码
  1.    
  2.   
  3. 这里上传的附件限制大小,具体内容在<a style="font-size: 1em; line-height: 1.5;" href="http://download.csdn.net/detail/zhangxxheng/5899041">http://download.csdn.net/detail/zhangxxheng/5899041</a> 

猜你喜欢

转载自oaksun.iteye.com/blog/1938958