zoukankan      html  css  js  c++  java
  • Java操作mongoDB2.6的常见API使用方法

    对于mongoDB而言,学习方式和学习关系型数据库差不太多

    開始都是学习怎样insert、find、update、remove,然后就是分页、排序、索引,再接着就是主从复制、副本集、分片等等

    最后就是通过它提供的各个驱动(比方Java、PHP、node.js等等)来练习所谓的高级使用方法


    另外:相对于Oracle有PLSQL Developer,MySQL有HeidiSQL

                mongoDB也不例外,它的图形化工具中有一款叫做mongoVUE的,我用的是1.5.3破解版(不是每15天就得改一次注冊表的那种)


    以下演示的就是以Java为例,常见的操作mongoDB API使用方法

    package com.jadyer.test;
    
    import java.net.UnknownHostException;
    import java.util.ArrayList;
    import java.util.List;
    
    import org.bson.types.ObjectId;
    import org.junit.AfterClass;
    import org.junit.BeforeClass;
    import org.junit.Test;
    
    import com.mongodb.BasicDBObject;
    import com.mongodb.DB;
    import com.mongodb.DBCollection;
    import com.mongodb.DBCursor;
    import com.mongodb.DBObject;
    import com.mongodb.MongoClient;
    import com.mongodb.WriteResult;
    import com.mongodb.util.JSON;
    
    /**
     * mongoDB的Java驱动測试
     * @see ----------------------------------------------------------------------------------------
     * @see 配置
     * @see 1)下载https://fastdl.mongodb.org/win32/mongodb-win32-x86_64-2008plus-2.6.1.zip
     * @see 2)解压到本地硬盘D:DevelopmongoDB中,并配置环境变量path=D:DevelopmongoDBin
     * @see   然后在CMD下运行此命令验证成功安装与否>mongod --version
     * @see 3)建立D:DevelopmongoDBData目录,用于存放mongoDB数据文件
     * @see 4)自己定义bat文件,分别用于启动mongoDB数据库和连接数据库的client
     * @see   启动client的mongo_client.bat内容为-->mongo 127.0.0.1:27017/admin
     * @see   启动数据库的mongo_db.bat内容为------>mongod --dbpath D:DevelopmongoDBData --rest
     * @see   注:加入[--rest]參数是为了可以訪问mongoDB的Web控制台http://127.0.0.1:28017/
     * @see ----------------------------------------------------------------------------------------
     * @see Java驱动
     * @see 这里要用到mongoDB的Java驱动包,下载地址http://docs.mongodb.org/ecosystem/drivers/java/
     * @see ----------------------------------------------------------------------------------------
     * @create May 15, 2014 10:17:30 PM
     * @author 玄玉<http://blog.csdn.net/jadyer>
     */
    public class MongoDBTest {
    	private static MongoClient mongoClient;
    	private static DB db;
    	
    	/**
    	 * 建立数据库连接
    	 */
    	@BeforeClass
    	public static void globalInit(){
    		try {
    			//mongoClient = new MongoClient(Arrays.asList(new ServerAddress("127.0.0.1", 27017), new ServerAddress("127.0.0.1", 27018), new ServerAddress("127.0.0.1", 27019)));
    			mongoClient = new MongoClient("127.0.0.1", 27017);
    		} catch (UnknownHostException e) {
    			System.err.println("mongoDB主机地址有误");
    		}
    		db = mongoClient.getDB("mydemo");
    	}
    	
    	
    	/**
    	 * 销毁数据库连接
    	 */
    	@AfterClass
    	public static void globalDestroy(){
    		mongoClient.close();
    	}
    	
    	
    	/**
    	 * 获取数据库信息
    	 */
    	@Test
    	public void getMetaData(){
    		//查询数据库中全部的集合名称
    		for(String collectionName : db.getCollectionNames()){
    			System.out.println("mydemo数据库所拥有的集合为:[" + collectionName + "]");
    		}
    		//查询某一集合中的数据
    		DBCollection collection = db.getCollection("person");
    		DBCursor cursor = collection.find();
    		try{
    			while(cursor.hasNext()){
    				System.out.println("person集合所拥有的name为--[" + cursor.next().get("name") + "]");
    			}
    		}finally{
    			cursor.close();
    		}
    		System.out.println("person集合中的记录数为----------->" + cursor.count());
    		System.out.println("person集合数据格式化后的JSON串为-->" + JSON.serialize(cursor));
    	}
    	
    	
    	/**
    	 * 创建一个空的"moive"集合
    	 */
    	@Test
    	public void createCollection(){
    		db.createCollection("movie", new BasicDBObject());
    	}
    	
    	
    	/**
    	 * 为"moive"集合加入文档
    	 */
    	@Test
    	public void insertDocument(){
    		DBObject doc = new BasicDBObject();
    		doc.put("name", "24");
    		doc.put("season", "ninth");
    		doc.put("score", 88);
    		List<String> actorList = new ArrayList<String>();
    		actorList.add("Jack Bauer");
    		actorList.add("Counter Terrorist Unit");
    		doc.put("actor", actorList);
    		db.getCollection("movie").insert(doc);
    	}
    	
    	
    	/**
    	 * 批量插入文档
    	 */
    	@Test
    	public void insertBatchDocument(){
    		List<DBObject> docList = new ArrayList<DBObject>();
    		DBObject doc11 = new BasicDBObject("name", "Prison Break").append("season", "fourth").append("score", 99);
    		DBObject doc22 = new BasicDBObject("name", "Game of Thrones").append("season", "third").append("score", 92);
    		docList.add(doc11);
    		docList.add(doc22);
    		db.getCollection("movie").insert(docList);
    	}
    	
    	
    	/**
    	 * 依据_id删除数据
    	 */
    	@Test
    	public void deleteById(){
    		WriteResult result = db.getCollection("movie").remove(new BasicDBObject("_id", new ObjectId("5374c6dc5030e0ea4dac8907")));
    		System.out.println("本次操作影响的记录条数为:" + result.getN());
    	}
    	
    	
    	/**
    	 * 依据条件删除数据
    	 */
    	@Test
    	public void deleteByData(){
    		DBObject doc = new BasicDBObject();
    		doc.put("name", "Prison Break");
    		WriteResult result = db.getCollection("movie").remove(doc);
    		System.out.println("本次操作影响的记录条数为:" + result.getN());
    	}
    	
    	
    	/**
    	 * 更新数据
    	 * @see 添加email属性
    	 */
    	@Test
    	public void update(){
    		DBObject doc = new BasicDBObject();
    		doc.put("$set", new BasicDBObject("email", "Jadyer@yeah.net"));
    		WriteResult result = db.getCollection("movie").update(new BasicDBObject(), doc, false, true);
    		System.out.println("本次操作影响的记录条数为:" + result.getN());
    	}
    	
    	
    	/**
    	 * 查询"moive"集合中的key
    	 */
    	@Test
    	public void getKey(){
    		DBObject keys = new BasicDBObject();
    		keys.put("_id", false);
    		keys.put("name", true);
    		//keys.put("score", true);
    		//第一个參数表示查询条件,第二个參数表示返回的详细key
    		DBCursor cursor = db.getCollection("movie").find(null, keys);
    		try{
    			while(cursor.hasNext()){
    				DBObject object = cursor.next();
    				System.out.println("查询到的name=" + object.get("name") + ", score=" + object.get("score"));
    			}
    		}finally{
    			cursor.close();
    		}
    	}
    	
    	
    	/**
    	 * 查询"moive"集合中分数不超过95的key
    	 */
    	@Test
    	public void getKeyUseScore(){
    		DBObject ref = new BasicDBObject();
    		ref.put("score", new BasicDBObject("$lte", 95));
    		DBCursor cursor = db.getCollection("movie").find(ref, null);
    		try{
    			while(cursor.hasNext()){
    				DBObject object = cursor.next();
    				System.out.println("查询到的name=" + object.get("name") + ", score=" + object.get("score"));
    			}
    		}finally{
    			cursor.close();
    		}
    	}
    	
    	
    	/**
    	 * 分页查询
    	 */
    	@Test
    	public void limitSkip(){
    		DBCursor cursor = db.getCollection("movie").find(null, null);
    		cursor.limit(0).skip(1);
    		try{
    			while(cursor.hasNext()){
    				DBObject object = cursor.next();
    				System.out.println("查询到的name=" + object.get("name"));
    			}
    		}finally{
    			cursor.close();
    		}
    	}
    }
  • 相关阅读:
    成为优秀程序员的101条建议(3)
    shell字符串的用法
    Centos yum国内源及配置含义
    go自动补全
    shell中空格的使用;空格替换;通配符
    shell自动补全功能:bash和zsh;zsh启动优化
    Mac下的命令行自动补全功能
    mac环境下intellij的自定义配置文件位置
    vim中delete(backspace)键不能向左删除
    一个性能较好的JVM参数配置
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4171972.html
Copyright © 2011-2022 走看看