package test.feed;
import java.net.UnknownHostException;
import java.util.Iterator;
import java.util.regex.Pattern;
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.Mongo;
import com.mongodb.MongoException;
public class TestMongoDB {
private String HOST="localhost";
private Integer PORT=27017;
private String DB_NAME="skyline";
private String USER="skyline";
private String PASSWORD="skyline";
private String COLLECTION="testCollection";
// private Integer SIZE=1000;
@Test
public void initTest() throws Exception{
try {
long beginTime=System.currentTimeMillis();
Mongo conn=new Mongo(HOST,PORT);//建立数据库连接
long endTime=System.currentTimeMillis();
DB testDB=conn.getDB(DB_NAME);//取得test数据库
System.out.println(endTime-beginTime);
/**
* 如果test数据库没有设定用户权限认证,则无需下面的验证
*/
boolean loginSuccess=testDB.authenticate(USER, PASSWORD.toCharArray());
if(!loginSuccess){
throw new Exception("登录"+DB_NAME+"验证失败,请确认用户名和密码");
}
testDB=conn.getDB(DB_NAME);//取得test数据库
/**
* 如果COLLECTION不存在,则MongoDB会自动为你创建此collection
*/
DBCollection collection=testDB.getCollection(COLLECTION);
//开始插入数据操作
//insertData(collection,SIZE);
//查询操作
findData(collection);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (MongoException e) {
e.printStackTrace();
}
}
private static void insertData(DBCollection collection,int size){
long beginTime=System.currentTimeMillis();
for(int i=1;i<=size;i++){
BasicDBObject basic=new BasicDBObject();
basic.put("userId", "1001017"+i);
basic.put("userName", "Bill Tu"+i);
basic.put("gender", "m"+i);
BasicDBObject interests=new BasicDBObject();
interests.put("game", "game"+i);
interests.put("ball", "ball"+i);
interests.put("other", "nothing"+i);
basic.put("interests", interests);
collection.insert(basic);
}
long endTime=System.currentTimeMillis();
System.out.println("插入用时:"+(endTime-beginTime)+" ms");
}
/**
* 根据指定collection单collection查询
*
*/
private static void findData(DBCollection collection){
//查询所有记录
long beginTime=System.currentTimeMillis();
DBCursor queryAll=collection.find();
System.out.println("所有记录:");
for(Iterator<DBObject> iter=queryAll.iterator();iter.hasNext();){
// System.out.println(iter.next());
iter.next();
}
long endTime=System.currentTimeMillis();
System.out.println("查询所有记录用时:"+(endTime-beginTime)+" ms");
//只看第一条记录
DBObject queryFirstRecord=collection.findOne();
System.out.println("第一条记录:"+queryFirstRecord);
//根据单条件查询
beginTime=System.currentTimeMillis();
DBObject singleCondition_query=new BasicDBObject();
//根据userId=10010172条件来查
singleCondition_query.put("userId", "10010172");
DBCursor singleQueryResult=collection.find(singleCondition_query);
for(Iterator<DBObject> iter=singleQueryResult.iterator();iter.hasNext();){
System.out.println("按单条件查询结果:"+iter.next());
}
endTime=System.currentTimeMillis();
System.out.println("查询所有记录用时:"+(endTime-beginTime)+" ms");
//根据复合条件来查询
DBObject compoundCondition_query=new BasicDBObject();
//根据userId=10010171&userName=Bill Tu1来查询
compoundCondition_query.put("userId", "10010171");
compoundCondition_query.put("userName", "Bill Tu1");
DBCursor compoundQueryResult=collection.find(compoundCondition_query);
System.out.println("按复合条件查询结果:");
for(Iterator<DBObject> iter=compoundQueryResult.iterator();iter.hasNext();){
System.out.println(iter.next());
}
//in查询
DBObject in_data=new BasicDBObject("$in",new Object[]{"10010171","10010172"});
//根据userId in('10010171','10010172')查询
DBObject in_query=new BasicDBObject();
in_query.put("userId", in_data);
DBCursor inQueryResult=collection.find(in_query);
System.out.println("按in条件查询结果:");
for(Iterator<DBObject> iter=inQueryResult.iterator();iter.hasNext();){
System.out.println(iter.next());
}
//模糊查询
DBObject fuzzy_query=new BasicDBObject();
String keyWord="10010171";
Pattern pattern = Pattern.compile("^" + keyWord + ".*$", Pattern.CASE_INSENSITIVE);
//根据userId like 1001017%查询
fuzzy_query.put("userId", pattern);
DBCursor fuzzyQueryResult=collection.find(fuzzy_query);
System.out.println("按模糊条件查询结果:");
for(Iterator<DBObject> iter=fuzzyQueryResult.iterator();iter.hasNext();){
System.out.println(iter.next());
}
}
}