但還好堅持了下來,現在把學習的心得記錄一下。
程序員特點,沒有廢話,直接上代碼:
publicclass Test2 {
@Test
publicvoid setDBData(){
// 連接本地數據庫
try {
Mongo m = new Mongo( "localhost" , 27017 );
//創建名爲test_db的數據庫
DB db = m.getDB("test_db");
//獲取test_table中的集合(類似於獲取關係數據庫中的表)
Set<String> cols = db.getCollectionNames();
//創建一個叫做"test_table"的集合
DBCollection collection = db.getCollection("test_table");
for(int i=0;i<100;i++){
//基本DB對象,最終插入數據庫的就是這個DB對象
BasicDBObject obj = new BasicDBObject();
obj.put("id", i);
obj.put("fid", i%30);
obj.put("uid", "name"+i%60);
obj.put("groupid", i%40);
obj.put("ip", "192.168.0."+(i+1)%40);
obj.put("regTime", new Date());
collection.insert(obj);
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
publicvoid getDBData(){
// 連接本地數據庫
try {
Mongo m = new Mongo( "localhost" , 27017 );
//創建名爲test_db的數據庫
DB db = m.getDB("test_db");
//創建一個叫做"test_table"的集合
DBCollection collection = db.getCollection("test_table");
//排序 1爲升序 -1爲降序
DBCursor cursor=collection.find().sort(new BasicDBObject("id",-1)); //排序 1爲升序 -1爲降序
//DBCursor cursor=collection.find().limit(10); //只取前十個
//DBCursor cursor=collection.find().skip(10); //取前十個記錄之後的
//collection.find().count() ; //總記錄數
//select * from test_table where id>=10 and id<30 注:$gt=(>) $gte=(>=) $lt=(<) $lte=(<=) $ne=(!=)
//DBCursor cursor = collection.find(new BasicDBObject("id",new BasicDBObject("$lt", 30).append("$gte", 10)));
/**
//select * form table where id in (1,12,23)
int [] strs = new int[3]; //其實也可以放在List裏面
strs[0] = 1;
strs[1] = 12;
strs[2] = 23;
DBCursor cursor=collection.find(new BasicDBObject("id",new BasicDBObject("$in",strs)));
*/
/**查詢特定字段
DBObject query = new BasicDBObject();//要查的條件
query.put("uid", "name10");
DBObject field = new BasicDBObject();//要查的哪些字段
field.put("id", true);
field.put("fid", true);
field.put("ip", true);
DBCursor cursor=collection.find(query,field);
*/
while(cursor.hasNext()){
System.out.println(cursor.next());
}
/** select distinct("uid") from table
* 注意:distinct("uid")這個字段是什麼類型,list.get(i)就是什麼類型
List list=(List) collection.distinct("uid");
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
*/
/**按照groupid分組,並且分組後計算fid的sum
//select groupid ,sum(fid) fidCount form table group by groupid
//key是group by 的字段
BasicDBObject key = new BasicDBObject();
key.put("groupid", true);
//cond是where的條件 可以爲空
BasicDBObject cond = new BasicDBObject();
//initial是字段sum的初始值
BasicDBObject initial = new BasicDBObject();
initial.put("fidCount", 0);
//reduce是分解歸納求和 fid的sum
String reduce = "function(obj,prev) { prev.fidCount +=obj.fid; }";
DBObject obj = collection.group(key, cond, initial, reduce);
Set set = obj.keySet();
Iterator it = set.iterator();
int i=0;
while(it.hasNext()){
String str_key = (String) it.next();
System.out.println(obj.get(str_key));
i++;
}
*/
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
publicvoid deleteTable(){
try {
Mongo m = new Mongo( "localhost" , 27017 );
//創建名爲test_db的數據庫
DB db = m.getDB("test_db");
//db.dropDatabase(); //刪除數據庫
DBCollection collection = db.getCollection("test_table");
//collection.drop(); //刪除表
collection.remove(new BasicDBObject()); //清空表數據
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Test
publicvoid findDataByParams(){
try {
Mongo m = new Mongo( "localhost" , 27017 );
//創建名爲test_db的數據庫
DB db = m.getDB("test_db");
DBCollection collection = db.getCollection("test_table");
DBObject obj = new BasicDBObject();
//select ip,groupid form table where uid=name1
obj.put("uid", "name1");
DBCursor cursor=collection.find(obj,new BasicDBObject("ip",1).append("groupid", 1));
while(cursor.hasNext()){
System.out.println(cursor.next());
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Test
publicvoid updateData(){
try {
Mongo m = new Mongo( "localhost" , 27017 );
//創建名爲test_db的數據庫
DB db = m.getDB("test_db");
DBCollection collection = db.getCollection("test_table");
/** 以下是用findAndModify方法更改數據
DBObject obj = new BasicDBObject();
obj.put("uid", "name59");
DBObject obj2 = new BasicDBObject();
obj2.put("ip", "111.111.111.333");
//UPDATE test_table SET ip = 111.111.111.333 WHERE uid=name59;
DBObject objOld = collection.findAndModify(obj, new BasicDBObject("$set",obj2));
System.out.println("objOld==="+objOld);
//這裏,findAndModify方法執行後,返回的DBObject內容還是舊的內容,但是數據庫裏的記錄已經改爲了新的記錄
//如下:
DBCursor cursor= collection.find(obj);
while(cursor.hasNext()){
System.out.println("objNew=="+cursor.next());
}
*/
// 以下是用update方法更改數據 注:findOne是返回滿足條件的第一個記錄
// UPDATE test_table SET ip = 100.100.100.333 WHERE uid=name59;
DBObject obj = new BasicDBObject();
obj.put("uid", "name59");
DBObject obj2 = collection.findOne(obj);
obj2.put("ip", "100.100.100.333");
collection.update(obj, obj2);
System.out.println("==="+collection.findOne(obj));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Test
publicvoid deleteData(){
try {
Mongo m = new Mongo( "localhost" , 27017 );
//創建名爲test_db的數據庫
DB db = m.getDB("test_db");
DBCollection collection = db.getCollection("test_table");
DBObject obj = new BasicDBObject();
obj.put("uid", "name59");
//刪除數據
collection.remove(obj);
getDBData();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
以上對mongodb的基本操作應該夠用,現在還有弄不明白的就是它的模糊查詢和MapReduce的用法,模糊查詢只知道是用正則來實現。
以後有空再細細摸索一下吧