博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MongoDB java操作的一些记录
阅读量:7022 次
发布时间:2019-06-28

本文共 6460 字,大约阅读时间需要 21 分钟。

hot3.png

/** * 工具类 */package com.topsoft.websites.sun.db;import java.net.UnknownHostException;import java.util.logging.Logger;import com.mongodb.DB;import com.mongodb.MongoClient;import com.mongodb.ServerAddress;/** * @author sunyameng *2014-2-26下午2:50:29 */public class DBClient {	private Logger logger=Logger.getLogger(DBClient.class.getName());	private static DBClient instance=new DBClient();	private MongoClient mongoClient;	private DB db;	private DBClient(){}	public DB getDB(String ip,Integer port,String dbName,String user,String pwd){		if(port==null) port=27017;		try {			mongoClient = new MongoClient(new ServerAddress(ip, port));		    db = mongoClient.getDB(dbName);            boolean auth = db.authenticate(user, pwd.toCharArray());		    if(auth){		    	logger.info("user or password is wrong.");		    	close();		    	return null;		    }		} catch (UnknownHostException e) {			logger.info("Cann't find host "+e.getCause().toString());			close();		}		return db;	}	public void close(){		if(mongoClient!=null)			mongoClient.close();	}	public static DBClient getInstance(){		return instance;	}}

一些测试遇到的问题

/** *  */package com.topsoft.websites.sun.test;import static com.mongodb.util.MyAsserts.assertTrue;import static org.junit.Assert.assertEquals;import static org.junit.Assert.assertNotNull;import java.util.ArrayList;import java.util.List;import java.util.Set;import com.mongodb.*;import org.junit.AfterClass;import org.junit.BeforeClass;import org.junit.Ignore;import org.junit.Test;import org.junit.runner.RunWith;import org.junit.runners.JUnit4;import com.topsoft.websites.sun.db.DBClient;/** * @author sunyameng *2014-2-26下午3:08:46 */@RunWith(JUnit4.class)public class DBClientTest {	private static DBClient dbClient;	private static DB db;	@BeforeClass	public static void setUpBeforeClass() {		dbClient=DBClient.getInstance();		db=dbClient.getDB("127.0.0.1",27017,"topsites", "admin", "");	}			@AfterClass	public static void tearDownAfterClass(){		dbClient.close();	}		@Test	public void testGetDB() {		assertNotNull(db);	}	/*	 * get a list of collections	 */	@Test    @Ignore	public void getListCollections(){		Set
 collections=db.getCollectionNames(); assertNotNull(collections); for(String s:collections){ System.out.println(s); } } @Test public void testFind(){ DBCollection coll=db.getCollection("site");        DBObject query = new BasicDBObject("s_name", "河南拓普");        List
 list=coll.find(query).toArray();        assertTrue(list.size()>0);        DBObject obj=list.get(0);        System.out.println(obj);    } @Test    public void testSave(){        DBCollection coll=db.getCollection("site");        DBObject query = new BasicDBObject("name", "tom").append("age",20);        coll.save(query);    }    private BasicDBObject copy(DBObject dbObject){        if(dbObject==null) return null;        return new BasicDBObject((BasicDBObject)dbObject);    }    @Test    @Ignore    public void testFindAndInsert(){        DBCollection coll=db.getCollection("site");        DBObject query = new BasicDBObject("name", "tom");        //查找的记录包含_id字段,在保存或插入的时候应该复制一份dbobject,否则会报can't save partial object错误        List
 list=coll.find(query).toArray();        DBObject obj=list.get(0);        //复制一份        BasicDBObject copyObj=copy(obj);        copyObj.put("name", "amorn");        System.out.println(copyObj);        boolean result=true;        try{            //save方法和insert方法的区别:如果已经存在一个_id和要保存的一样,则更新它;            //如果不存在,则插入一条;而insert方法则会insert方法则会插入一条新的纪录,前提是插入的记录中不包含_id            coll.save(copyObj);        }catch (Exception e){            result=false;            e.printStackTrace();        }        assertTrue(result);    }    @Test    public void testFindAndUpdate(){        DBCollection coll=db.getCollection("site");        DBObject query = new BasicDBObject("name", "tom");        List
 list=coll.find(query).toArray();        DBObject obj=list.get(0);        //复制一份        BasicDBObject copyObj=copy(obj);        copyObj.put("name", "mh370");        boolean result=true;        try{            //upsert参数设置为true,表示如果不存在则插入一条,如果存在直接更新;multi设置为true,表示更新多行            //此处的更新会重写该条记录,即擦除之前的纪录,_id保持不变            //此处更新不能使用多行更新,会报错multi update only works with $ operators            coll.update(query, copyObj);            //第二种更新方式,就是更新指定字段,此种方法可以使用多行更新,此处只做一个实例            //BasicDBObject updateObj=new BasicDBObject("$set",new BasicDBObject("name","mh370"));            //coll.update(query, updateObj,true,true);        }catch (Exception e){            result=false;            e.printStackTrace();        }        assertTrue(result);    } @Test @Ignore public void testCursor(){ DBCollection coll=db.getCollection("site"); DBCursor cursor=coll.find(); assertNotNull(cursor); try{ while(cursor.hasNext()){ System.out.println(cursor.next()); } }finally{ cursor.close(); } } @Test @Ignore public void testPageQuery(){ List
 list=getDBObject(2, 5); assertEquals(5,list.size()); for(DBObject obj:list){ System.out.println(obj.toString()); } } @Test @Ignore public void testProjection(){ DBCollection coll=db.getCollection("demo"); BasicDBObject field=new BasicDBObject("name",1).append("age", 1).append("_id", 0); DBCursor cursor=coll.find(null,field); assertNotNull(cursor); while(cursor.hasNext()){ System.out.println(cursor.next().toString()); } } @Test    @Ignore public void testCondition(){ String collectionName="site"; String[] fields=new String[]{"code","parentcode","name"}; DBObject condition=new BasicDBObject(); condition.put("name", "河南工商行政管理局"); DBCollection collection=db.getCollection(collectionName); List
 list=find(collection,fields,null,1,2); assertNotNull(list); for(int i=0;i
 getDBObject(int pageNumber,int nPerPage){ DBCollection coll=db.getCollection("employee"); DBCursor cursor=coll.find().skip((pageNumber-1)*nPerPage).limit(nPerPage); return cursor.toArray(); } public List
 find(DBCollection collection,String[] fields,DBObject condition,Integer pageNumber,Integer nPerPage){ List
 result=new ArrayList
(); BasicDBObject field=new BasicDBObject("_id",0); for(String f:fields){ field.append(f, 1); } if(pageNumber==null||nPerPage==null){ result=collection.find(condition,field).toArray(); }else{ result=collection.find(condition,field).skip((pageNumber-1)*nPerPage).limit(nPerPage).toArray(); } return result; } }

转载于:https://my.oschina.net/u/1387007/blog/212344

你可能感兴趣的文章
第41件事 创新设计的4种方法
查看>>
iOS--CollectionView添加类似TableView的TableViewHeaderView 和 SectionHeader 的置顶悬停效果...
查看>>
用半监督算法做文本分类
查看>>
【2802】SDUTOJ (并查集模板水题2)
查看>>
看书不挑出版社的都是山炮——评60家国内出版社
查看>>
326. Power of Three
查看>>
vue_drf之实现短信验证码
查看>>
“命令行程序”的通用图形界面 (转)
查看>>
虚拟机显示不了界面的解决方法
查看>>
SQL SERVER导出所有表及表字段
查看>>
关于消除超长的case列表的一个思路
查看>>
shell下root用户切换其他用户运行程序
查看>>
恢复Ext3下被删除的文件(转)
查看>>
Instagram 架构分析笔记(转)
查看>>
java http线程池
查看>>
java较全的面试题
查看>>
day3
查看>>
Allegro如何测量距离,测距工具的使用
查看>>
软件程序编码
查看>>
感觉好累
查看>>