日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java执行mongodb语句_java下执行mongodb

發布時間:2025/3/19 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java执行mongodb语句_java下执行mongodb 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.1連單臺mongodb

Mongo?mg?=?newMongo();//默認連本機127.0.0.1??端口為27017

Mongo?mg?=?newMongo(ip);//可以指定ip?端口默認為27017

Mongo?mg?=?newMongo(ip,port);//也可以指定ip及端口號

1.2連雙臺mongodb

//ip為主機ip地址,port為端口號,dataBaseName相當于數據庫名

DBAddress?left?=?new?DBAddress("ip:port/dataBaseName");

DBAddress?right?=?new?DBAddress("ip:port/dataBaseName");

//若一個mongodb出現問題,會自動連另外一臺

Mongo?mongo?=?new?Mongo(left,?right);

1.3連多臺mongodb

List?mongoHostList?=?newArrayList();

mongoHostList.add(newServerAddress("ip",port));

mongoHostList.add(newServerAddress("ip",port));

mongoHostList.add(newServerAddress("ip",port));

Mongo?mg?=?newMongo(mongoHostList);

2.1獲取mongodb的db

dataBaseName相當于關系數據庫里的數據庫名,mongodb中若沒有該數據庫名也不會報錯,默認mongodb會建立這個數據庫名,為空。

DB?db?=?mg.getDB(dataBaseName);?//注意:mongodb區分大小寫,程序中一定要注意

2.2mongodb的db安全認證

若這個時候要想訪問db中的collection(相當于關系數據庫里的表),就必須通過安全認證才可以訪問,否則后臺會報您沒有通過安全認證。

//安全認證java代碼?返回true表示通過,false表示沒通過不能進行操作

booleanauth?=db.authenticate("userName",?"password".toCharArray());

3.1得到mongodb中的db的collection

DBCollection?users?=?db.getCollection(tableName);

參數tableName相當于關系數據庫里的表名,若mongodb中沒有該tableName,默認會創建該tableName,為空

3.2mongodb中的db的collection自增長主鍵

Mongodb中也像傳統的關系數據庫里表一樣,有主鍵(_id)概念,用來唯一標識他們。當用戶往collection中插入一條新記錄的時候,

如果沒有指定_id屬性,那么mongodb會自動生成一個ObjectId類型的值,保存為_id的值。

3.3java對collection進行插入操作

//第一種插入方式

DBObject?data1?=?newBasicDBObject();

data1.put("cust_Id",?"123456");

data1.put("is_Show",?1);

data1.put("start_time",?newDate());

users.insert(data1);//等同于users.save(data1);

//第二中插入方式

BasicDBObjectBuilderdata1?=BasicDBObjectBuilder.start().add(...).add(...);

users.insert(data1.get());//等同于users.save(data1.get());

//第三種插入方式

Map?data1?=?newHashMap();

data1.put(...);

……

users.insert(newBasicDBObject(data1));//等同于users.save(newBasicDBObject(data1)

);

//第四中插入方式

String?json?=?"{'database':?'mkyongDB','table'?:?'hosting',"?+??"'detail'?:?{'records'?:?99,?'index'?:?'vps_index1',?'active'?:'true'}}}";

DBObject?data1?=?(DBObject)JSON.parse(json);

users.insert(data1);//等同于users.save(data1);

3.4java對collection的查詢操作

====================================

DBObject?fields?=?new?BasicDBObject();

fields.put("_id",?false);

fields.put("tag",?true);

fields.put("tv_sec",?true);

DBCursor?cur?=?users.find(query,?fields);

可以用來過濾不需要獲取的字段,?減少IO

====================================

//查詢所有的數據find()

DBCursor?cur?=?users.find();?while(cur.hasNext()){...}

//查詢id大于等于1的記錄,并且只取10條記錄

DBCursor?cur?=?users.find(newBasicDBObject("_id",newBasicDBObject("$gte",1))).limit(10);

//查詢id大于等于1的記錄,并按id進行降序-1表示降序,1升序。

DBCursor?cur?=?users.find(new?BasicDBObject("_id",newBasicDBObject("$gte",1))).sort(newBasicDBObject("_id",-1));

//查詢id大于等于1的記錄,并跳過前10條記錄顯示?相當于id>10

DBCursor?cur?=?users.find(newBasicDBObject("_id",newBasicDBObject("$gte",1))).skip(10);

//查詢id大于等于1的記錄,跳過前10條記錄并且只顯示10條記錄。相當//于分頁功能where?id>10?and?id<=20

DBCursor?cur?=?users.find(newBasicDBObject("_id",?newBasicDBObject("$gte",1))).skip(10).limit(10);

//查詢id大于等于1的所有記錄數?返回int型

users.find(newBasicDBObject("_id",newBasicDBObject("$gte",1))).count()

//findAndRemove()?查詢_id=30000的數據,并且刪除

users.findAndRemove(newBasicDBObject("_id",?30000));

3.5java對collection的更新操作

查詢id為300的記錄,將cust_Id的值更新為6533615,一定要注意大小寫,以及數據//類型,返回值為int表示所影響的記錄條數可以用users.findOne(newBasicDBObject("_id",300));查看下,會發現這條記錄//只返回兩個字段了,分別為_id,cust_Id,別的字段都刪除了。

users.update(newBasicDBObject("_id",300),?newBasicDBObject?("cust_Id","6533615")).getN();

//這種寫法可以實現只更新id為300的cust_Id值為6533615,而不刪除這條記錄的別的字//段屬性

users.update(newBasicDBObject("_id",300),?newBasicDBObject("$set",newBasicDBObject("cust_Id","6533615"))).getN();

3.6java對collection的刪除操作

//移除cust_Id為6533615的數據。注意?用remove方法不釋放磁盤空間,

//mongodb只在collection中做了標志,沒有正在刪除。

users.remove(newBasicDBObject("cust_Id","6533615")).getN();

//移除id>=1的數據

users.remove(newBasicDBObject("_id",new?BasicDBObject("$gte",1))).getN();

//移除整個collection,drop也不釋放磁盤空間

users.drop();

本周實驗性地使用上mongodb,應用場景很簡單,所以現在對mongodb了解也不是很深入。本文主要介紹mongodb的java客戶端編程,這方面的內容也很簡單,這里只是做個總結。不得不說,像mongodb這種介于kv和sql之間的存儲,對很多的互聯網應用很合適。mongodb現在的應用案例已經很多,并且社區的活躍度很高(國內也有不少人對其有很深的研究,如果有時間和精力,或許我也會投入一些對mongodb的研究),很值得期待。

言歸正傳,下面總結下使用Java開發mongodb應用的一些點滴。在Java中和mongodb交互的最直接的選擇就是使用MongoDB?Java?Driver,其下載地址是:http://github.com/mongodb/mongo-java-driver/downloads。總的來說,在Java中操作mongodb的API還是很簡潔,下面對其一些常見的使用做些介紹。

1、連接數據庫

和mongodb建立連接的示例代碼如下:

Mongo?m?=new?Mongo("localhost",27017);?DB?db?=?m.getDB("db_test");

盡管這里獲得了表示mongodb的db_test數據庫連接的對象db,但這時并沒有真正和mongodb建立連接,所以即便這時數據庫沒起來也不會拋出異常,盡管你還是需要catch它的實例化過程。mongodb的java?driver對連接做了池化處理,所以應用中只需要實例化一個Mongo對象即可,對它的操作是線程安全的,這對開發使用來說真的是很方便。

2、取得DBCollection

mongodb中的collection在Java中使用DBCollection表示(這是一個抽象類,盡管你不必需要知道),創建DBCollection實例也是一行代碼,和創建DB實例一樣,這個操作并不涉及真正的和數據庫之間的通信。

DBCollection?coll?=?db.getCollection("collection1");

要獲得類似mysql中“show?tables”功能,可以使用如下代碼:

Set?colls?=?db.getCollectionNames();for(String?s?:?colls){System.out.println(s);}3、插入文檔

mongodb存儲JSON格式的文檔,而在Java中表示這種數據格式的最簡便的類就是Map了。MongoDB?Java?Driver中提供的BasicDBObject就是個Map(它繼承自LinkedHashMap并實現DBObject接口),它會將Map中的數據轉換成BSON格式傳輸到mongodb。下面是插入文檔的示例:

DBCollection?coll=db.getCollection("collection1");

BasicDBObject?doc=new?BasicDBObject();

doc.put("name","kafka0102");doc.put("age",28);doc.put("time",?newDate());

coll.insert(doc);

mongodb中每個插入的文檔會產生個唯一標識_id。當調用coll.insert(doc);時,driver會檢查其中是否有_id字段,如果沒有則自動生成ObjectId實例來作為_id的值,這個ObjectId由4部分編碼而成:當前時間、機器標識、進程號和自增的整數。 insert函數也支持插入文檔列表:

insert(List?list)

而提交操作也有update(?DBObject?q?,?DBObject?o?)、remove(?DBObject?o?)。

4、查詢文檔4.1、findOne

findOne是查詢滿足條件的第一條記錄(不意味著數據庫滿足條件的只有一條記錄),查詢條件使用DBObject表示,示例如下:

DBCollection?coll=db.getCollection("collection1");

BasicDBObject?cond=new?BasicDBObject();

cond.put("name","kafka0102");cond.put("age",28);

DBObject?ret=coll.findOne(cond);System.out.println(ret);

返回結果是個DBObject,可以通過get(key)來取值。對于查詢條件,可以通過嵌套多層來表示復雜的格式,比如:

query=newBasicDBObject();

query.put("i",?new?BasicDBObject("$gt",50));//?e.g.?find?all?where?i?>?50

4.2、find

find函數是查詢集合的,它返回的DBCursor是DBObject的迭代器,使用示例如下:

DBCollection?coll=db.getCollection("collection1");

BasicDBObject?cond=new?BasicDBObject();cond.put("i",?new?BasicDBObject("$gt",20).append("$lte",30));

DBCursor?ret=coll.find(cond);

while(ret.hasNext()){System.out.println(ret.next());}

5、使用索引

創建索引語句如:coll.createIndex(new?BasicDBObject(“i”,?1));?,其中i表示要索引的字段,1表示升序(-1表示降序)。可以看到,DBObject成為java客戶端通用的結構表示。查看索引使用DBCollection.getIndexInfo()函數。

6、MongoDB?Java?Driver的并發性

前面提到,Java?MongoDB?Driver使用了連接的池化處理,這個連接池默認是保持10個連接,可以通過Option進行修改,在應用中使用Mongo的一個實例即可。連接池中的每個連接使用DBPort結構表示(而不是DBCollection),并寄存于DBPortPool中,所以對DBCollection的操作并不意味著使用同一個連接。如果在應用的一次請求過程中,需要保證使用同一個連接,可以使用下面的代碼片斷:

DB?db...;?db.requestStart();//code....?db.requestDone();

在requestStart和requestDone之間使用的連接就不是來自于DBPortPool,而是當前線程中的ThreadLocal結構變量(MyPort中保持了DBPort成員)。

7、其他選擇

盡管Java?mongodb?driver很不錯,但就像很多人不使用JDBC而使用一些ORM框架,mongodb的java客戶端也有其他的選擇。 1)對POJO和DAO的支持。對于那些熱衷ORM的人來說,Morphia(http://code.google.com/p/morphia/wiki/QuickStart)是個不錯的選擇,它通過在POJO中添加注釋來實現映射,并提供對DAO的CRUD操作的支持。 2)對DSL的支持。Sculptor就是這樣的東西,使用者編寫中立的DSL文件,Sculptor將其翻譯成代碼。這通常不具有吸引力,除非是多語言的應用,能將DSL翻譯成多種編程語言,否則除了增加學習成本,沒什么收益。 3)對JDBC的支持。mongo-jdbc是這樣的東西,但現在還是實驗性質的。它或許是想親近Java程序員,不過它顯然不能完全兼容JDBC,而很多Java程序員對JDBC也并不感冒,所以它不是很值得使用。

本文為轉載,原地址為:

總結

以上是生活随笔為你收集整理的java执行mongodb语句_java下执行mongodb的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。