`
我叫张恒
  • 浏览: 19650 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

mongoDB入门级的开发

 
阅读更多

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

一:如何安装mongoDB服务

     1.     下载mongodbwindows版本,有32位和64位版本,根据系统情况下载,下载地址:http://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学习手册。

 

 

接下来可以进行开发了。

 

package com.cyou.mongdb.test;

import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.mongodb.BasicDBObject;
import com.mongodb.BasicDBObjectBuilder;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.Mongo;

public class MongoUser {

	  private Mongo mongo = null;
	  private DB db = null;
	  private DBCollection conllection = null;

	  /**
	   * init:初始化mongo. <br/>
	   * 
	   * @author zhangheng
	   * @param host 主机
	   * @param port 端口号
	   * @since JDK 1.6
	   */
	  public void init(String host, int port, String dbName, String collectionName){
	    try {
	      if (mongo == null) {
	        // 是使用本地地址和默认端口号相当于//mg = new Mongo("localhost", 27017)
	        mongo = new Mongo();
	      }

	    } catch (UnknownHostException e) {
	      // TODO Auto-generated catch block
	      e.printStackTrace();
	    }
	    // 获取temp DB;如果默认没有创建,mongodb会自动创建
	    db = mongo.getDB(dbName);
	    // 获取users DBCollection;如果默认没有创建,mongodb会自动创建
	    conllection = db.getCollection(collectionName);
	  }

	  /**
	   * destroy:销毁mongo对象. <br/>
	   * 
	   * @author zhangheng
	   * @since JDK 1.6
	   */
	  public void destroy(){
	    if (mongo != null) {
	      mongo.close();
	      mongo = null;
	      db = null;
	      conllection = null;
	      // 通知垃圾回收机制回收
	      System.gc();
	    }
	  }

	  public DBObject getBDbObject(){
	    return null;
	  }

	  /**
	   * add:添加一个记录. <br/>
	   * 
	   * @author zhangheng
	   * @since JDK 1.6
	   */
	  //通过BasicDBObject的方式向mongo中插入数据
	  public void addToBasicDBObject(BasicDBObject document,DBCollection dbCollection){
		  dbCollection .insert(document);
	  }
	//通过BasicDBObjectBuilder的方式向mongo中插入数据
	  public void addToBasicDBObjectBuilder(BasicDBObjectBuilder document,DBCollection dbCollection){
		  dbCollection .insert(document.get());
	  }
	  //通过Map的方式向mongo中插入数据
	  public void addToMap(Map documentMap,DBCollection dbCollection){
		  dbCollection .insert(new BasicDBObject(documentMap));
	  }
	  /**
	   * cursorIterator:根据游标的位置输出遍历的集合. <br/>
	   * 
	   * @author zhangheng
	   * @param cur
	   * @since JDK 1.6
	   */
	  public void cursorIterator(DBCursor cur){
	    while (cur.hasNext()) {
	      System.out.println(cur.next());
	    }
	  }

	  /**
	   * queryAll:查询集合中的所有元素). <br/>
	   * 
	   * @author zhangheng
	   * @param dbCollection
	   * @return
	   * @since JDK 1.6
	   */
	  public DBCursor queryAll(DBCollection dbCollection){
	    DBCursor cur = dbCollection.find();
	    return cur;
	  }

	  /**
	   * getCount:获得文档中的记录条数. <br/>
	   * 
	   * @author zhangheng
	   * @param collection
	   * @return
	   * @since JDK 1.6
	   */
	  public long getCount(DBCollection collection){
	    return collection.count();
	  }

	  /**
	   * remove:根据DBCollection对象从集合中删除对象. <br/>
	   * 
	   * @author zhangheng
	   * @param dbObject 纪录
	   * @param dbCollection 集合名
	   * @since JDK 1.6
	   */
	  public void remove(DBObject dbObject, DBCollection dbCollection){
	    dbCollection.remove(dbObject);
	  }
	  
	  
	  //更新
	  public void update(BasicDBObject frontDBObject,BasicDBObject afartDBObject,DBCollection dbCollection){
		  dbCollection.update(frontDBObject,afartDBObject);
	  }
	    // 第三个参数-----如果数据库不存在,是否添加
	    // 第四个参数-----多条修改false
	  public void motify(BasicDBObject frontDBObject, BasicDBObject afartDBObject,
	      DBCollection dbCollection,boolean isExist,boolean allMotify){
	    dbCollection.update(frontDBObject, afartDBObject, isExist, allMotify);
	  }

	  /**
	   * find:根据DBCollection查找. <br/>
	   * 
	   * @author zhangheng
	   * @param dbObject
	   * @param dbCollection
	   * @return
	   * @since JDK 1.6
	   */
	  public DBCursor getDocument(BasicDBObject dbObject, DBCollection dbCollection){
	    return dbCollection.find(dbObject);
	  }
	  
	  //获得第一条记录
	  public DBObject getFirstDocument(DBCollection dbCollection){
		  return dbCollection.findOne();
	  }
	  /**
	   * setReadOnly:设置数据库是否为可读. <br/>
	   * 
	   * @author zhangheng
	   * @param db 数据库
	   * @param bo true/false
	   * @since JDK 1.6
	   */
	  public void setReadOnly(DB db, boolean bo){
	    db.setReadOnly(bo);
	  }

	  public Mongo getMongo(){
	    return mongo;
	  }

	  public DB getDb(String dbName){
	    return db;
	  }

	  public DBCollection getUsers(){
	    return conllection;
	  }

	  
	}

 

 

 

 

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

 

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

  

/**
	   * main:进行一些测试. <br/>
	   * 
	   * @author zhangheng
	   * @param args
	   * @since JDK 1.6
	   */
	  public static void main(String[] args){
	    try {
	    	mongoTest = new MongoUser();
	    	mongoTest.init(null, 0, "zh", "testConllection");
	    
	    	System.out.println("集合中文档的数量"+mongoTest.getCount(mongoTest.conllection));
	    	System.out.println("==========================================================");
	    	//添加
	    	BasicDBObject document =   new BasicDBObject();
	    	document.put("name", "zhang");
	    	document.put("age", 20);
	    	document.put("sex", "famale");
	    	document.put("isStudents", true);
	    	mongoTest.addToBasicDBObject(document, mongoTest.conllection);
	    	
	    	BasicDBObjectBuilder  document1 =   new BasicDBObjectBuilder ();
	    	document1.append("name", "li").append("age", 22).append("sex", "male").append("isStudents", true);
	    	mongoTest.addToBasicDBObjectBuilder(document1, mongoTest.conllection);
	    	
	    	Map<String ,Object> document2 = new HashMap<String,Object>();
	    	document2.put("name", "zhang");
	    	document2.put("age", 21);
	    	document2.put("sex", "famale");
	    	document2.put("isStudents", true);
	    	mongoTest.addToMap(document2, mongoTest.conllection);


	    } catch (Exception e) {
	    } finally {
	    	mongoTest.destroy();
	    }
}
接下来分别是 查找 修改 删除 的测试在进行这些测试之前我 前调用了显示 全部记录的方法可以清晰的看见操作的结果。 

	    	//输出所有的数据信息 
	      DBCursor dbc =  mongoTest.queryAll(mongoTest.conllection);
	      System.out.println("输出所有记录:");
	      mongoTest.cursorIterator(dbc);  
 查找的方法有一般有这几种,还有的没有列出来。
//查找
	    	//获得第一个位置上的记录
	    	DBObject getFirstOne = mongoTest.getFirstDocument(mongoTest.conllection);
	    	System.out.println("获得第一条记录"+getFirstOne.toString());
	    	
	    	System.out.println("===================");
	    	//根据指定的条件查询相应的值 此处为查询name 为 li 的记录 相当于sql中where 列= **;
	    	BasicDBObject query1 = new BasicDBObject();
	    	query1.put("name", "li");
	    	DBCursor dbCursor1 =mongoTest.getDocument(query1, mongoTest.conllection);
	    	while(dbCursor1.hasNext()){
	    		System.out.println("根据条件查询 ---1:"+dbCursor1.next());
	    	}
	    	
	    	System.out.println("===================");
	    	//查询  介于 年龄在20 和 22 的 记录,相当于sql中的 where 条件中的in 
	    	BasicDBObject query2 = new BasicDBObject();
	    	List list = new ArrayList();
	    	list.add(22);
	    	list.add(20);
	    	query2.put("age", new BasicDBObject("$in",list)); 
	    	DBCursor dbCursor2 =mongoTest.getDocument(query2, mongoTest.conllection);
	    	while(dbCursor2.hasNext()){
	    		System.out.println("根据条件查询 ---2"+dbCursor2.next());
	    	}
	    	
	    	
	    	System.out.println("===================");
	    	//根据大于小于查询  ">" (大于号) "$gt"  "<"(小于号)"$lt" 
	    	//查询年龄大于21的值
	    	BasicDBObject query3 = new BasicDBObject();
	    	query3.put("age", new BasicDBObject("$gt",21)); 
	    	DBCursor dbCursor3 =mongoTest.getDocument(query3, mongoTest.conllection);
	    	while(dbCursor3.hasNext()){
	    		System.out.println("根据条件查询 ---3"+dbCursor3.next());
	    	}
	    	//查询年龄大于20 小于 22的值
	    	BasicDBObject query4 = new BasicDBObject();
	    	query4.put("age", new BasicDBObject("$gt",20).append("$lt", 22)); 
	    	DBCursor dbCursor4 =mongoTest.getDocument(query4, mongoTest.conllection);
	    	while(dbCursor4.hasNext()){
	    		System.out.println("根据条件查询 ---4"+dbCursor4.next());
	    	}
 
修改 
	    	System.out.println("===================");
	    	//更新
	    	//如果是更新整条数据的话,需要把所有的属性都要更新。如果其中的某个属性不写 的话 就是认为去掉该属性
	    	
	    	BasicDBObject update1 =new BasicDBObject();
	    	update1.put("name", "lily");
	    	update1.put("age", 5);
	    	update1.put("sex", "male");
	    	update1.put("isStudents", false);
	    	mongoTest.update(new BasicDBObject().append("name", "lily"), update1,mongoTest.conllection);
	    	
	    	//在原来属性的基础添加值 更新 使用  "$inc"  类似于大于小于的比较
	    	BasicDBObject update2 = new  BasicDBObject().append("$inc", new BasicDBObject().append("age", 7));
	    	mongoTest.update(new BasicDBObject().append("name", "lily"), update2,mongoTest.conllection);
	    	
	    	
	    	//利用set  改变某一属性的 值
	    	BasicDBObject update3 = new  BasicDBObject().append("$set", new BasicDBObject().append("isStudents", true));
	    	mongoTest.update(new BasicDBObject().append("name", "lily"), update3,mongoTest.conllection);
 删除 删除的方法写的比较简单。因为跟查找很像。$lt 表示 小于 前面说过
//删除 方法和 查找方法极为类似 
	    	BasicDBObject remove1 = new BasicDBObject();
	    	remove1.put("age", new BasicDBObject("$lt",20));
	    	mongoTest.remove(remove1, mongoTest.conllection);
 
删除数据库中所有的记录,我用的方法是 查出来所有记录逐一删除
//先查询出所有的内容然后 删除
	      DBCursor dbc1 =  mongoTest.queryAll(mongoTest.conllection);
	      while(dbc1.hasNext()){
	    	  mongoTest.remove(dbc1.next(), mongoTest.conllection);
	      }
 

这里上传的附件限制大小,具体内容在http://download.csdn.net/detail/zhangxxheng/5899041

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics