版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、優(yōu)就業(yè).JAVA 教研室課程目標(biāo)目標(biāo) 1:熟練編寫 MongoDB 增刪改查令目標(biāo) 2:java 連接 MongoDB 并實(shí)現(xiàn)增刪改查1.MongoDB 簡(jiǎn)介1.1 什么是 MongoDBMongoDB 是一個(gè)跨平臺(tái)的,面向文檔的數(shù)據(jù)庫(kù),是當(dāng)前 NoSQL的一種。它介于關(guān)系數(shù)據(jù)庫(kù)和非關(guān)系數(shù)據(jù)庫(kù)之間,是非關(guān)系數(shù)據(jù)庫(kù)當(dāng)數(shù)據(jù)庫(kù)中最熱門能最豐富,最像關(guān)系數(shù)據(jù)庫(kù)的。它支持的數(shù)據(jù)結(jié)構(gòu)非常松散,是類似 JSON的 BSON 格式,因此可以存儲(chǔ)比較復(fù)雜的數(shù)據(jù)類型。MongoDB 的地址是:1.2 MongoDB 特點(diǎn)MongoDB 最大的特點(diǎn)是他支持的語(yǔ)言非常強(qiáng)大,其語(yǔ)法有點(diǎn)類似于面向?qū)ο蟮牟樵冋Z(yǔ)言,幾乎可以
2、實(shí)現(xiàn)類似關(guān)系數(shù)據(jù)庫(kù)單表的絕大部分功能,而且還支持對(duì)數(shù)據(jù)建立索引。它是一個(gè)面向集合的,模的文檔型數(shù)據(jù)庫(kù)。具體特點(diǎn)總結(jié)如下:(1)面向集合,易于對(duì)象類型的數(shù)據(jù)(2)模(3)支持動(dòng)態(tài)(4)支持完全索引,包含內(nèi)部對(duì)象(5)支持和故障恢復(fù)(6)使用高效的二進(jìn)制數(shù)據(jù),包括大型對(duì)象(如等)(7)自動(dòng)處理碎片,以支持云計(jì)算層次的擴(kuò)展性(8)支持 Python,PHP,Ruby,Java,C,C#,Javascript,Perl 及 C+語(yǔ)言的驅(qū)動(dòng)程序,社區(qū)中也提供了對(duì)Erlang 及.NET 等平臺(tái)的驅(qū)動(dòng)程序(9) 文件格式為 BSON(一種 JSON 的擴(kuò)展)1.3 MongoDB 體系結(jié)構(gòu)MongoDB
3、的邏輯結(jié)構(gòu)是一種層次結(jié)構(gòu)。主要由:文檔(document)、集合(collection)、數(shù)據(jù)庫(kù)(database)這三部分組成的。邏輯結(jié)構(gòu)是面向用戶的,用戶使用 MongoDB 開發(fā)應(yīng)用程序使用的就是邏輯結(jié)構(gòu)。(1)MongoDB 的文檔(document),相當(dāng)于關(guān)系數(shù)據(jù)庫(kù)中的一行。(2)多個(gè)文檔組成一個(gè)集合(collection),相當(dāng)于關(guān)系數(shù)據(jù)庫(kù)的表。(3)多個(gè)集合(collection),邏輯上組織在一起,就是數(shù)據(jù)庫(kù)(database)。(4)一個(gè) MongoDB 實(shí)例支持多個(gè)數(shù)據(jù)庫(kù)(database)。文檔(document)、集合(collection)、數(shù)據(jù)庫(kù)(database
4、)的層次結(jié)構(gòu)如下圖:下表是 MongoDB 與 MySQL 數(shù)據(jù)庫(kù)邏輯結(jié)構(gòu)概念的對(duì)比2.安裝與啟動(dòng)2.1 安裝設(shè)置雙擊“”中的“mongodb-win32-x86_64-2008plus-ssl-3.2.10-signed.msi”MongoDb關(guān)系型數(shù)據(jù)庫(kù) Mysql數(shù)據(jù)庫(kù)(databases)數(shù)據(jù)庫(kù)(databases)集合(collections)表(table)文檔(document)行(row)按照提示步驟安裝即可。安裝完成后,軟件會(huì)安裝在 C:Program FilesMongoDB 目錄中。我們要啟動(dòng)的服務(wù)程序就是 C:Program FilesMongoDBServer3.2b
5、in 目錄下的mongod.exe,為了方便我們每次啟動(dòng),我將 C:Program FilesMongoDBServer3.2bin 設(shè)置到環(huán)境變量 path 中。2.2 啟動(dòng)服務(wù)(1)首先打開命令提示符,創(chuàng)建一個(gè)用于存放數(shù)據(jù)的目錄(2)啟動(dòng)服務(wù)dbpath 參數(shù)用于指定數(shù)據(jù)目錄啟動(dòng)后效果如下:我們?cè)趩?dòng)信息中可以看到,mongoDB 的默認(rèn)端口是 27017如果我們不想按照默認(rèn)端口啟動(dòng),可以通過(guò)-port 命令來(lái)修改端口2.3 登陸系統(tǒng)我們另外打開命令提示符窗口,如果 mongoDB 是按默認(rèn)的端口啟動(dòng)的,并且是部署在本機(jī)的。輸入命令 mongo 即可登陸系統(tǒng)從界面輸出的信息我們可以得知,它
6、默認(rèn)連接的是 test 數(shù)據(jù)庫(kù)如果是要連接的 mongoDB 服務(wù)器 ,就輸入命令如果的 mongoDB 服務(wù)端口不是默認(rèn)的,需要輸入命令mongoIP 地址:端口mongoIP 地址輸入 exit 命令可退回到命令提示符3.基本增刪改查操作3.1 選擇或創(chuàng)建數(shù)據(jù)庫(kù)使用 use 數(shù)據(jù)庫(kù)名稱即可選擇數(shù)據(jù)庫(kù),如果該數(shù)據(jù)庫(kù)不存在會(huì)自動(dòng)創(chuàng)建3.2文檔文檔相當(dāng)于關(guān)系數(shù)據(jù)庫(kù)中的首先我們定義一個(gè)文檔變量,格式為變量名稱=; 例如:接下來(lái)就是將這個(gè)變量存入 MongoDB格式為:這里的集合就相當(dāng)于關(guān)系數(shù)據(jù)庫(kù)中的表。例如:這樣就在 student 集合中存入文檔。如果這個(gè) student 集合不存在,就會(huì)自動(dòng)創(chuàng)
7、建。當(dāng)然,你也可以不用定義變量,直接把變量值放入 save 方法中也是可以地。為了方便后期測(cè)試,我們?cè)俣嗉狱c(diǎn)數(shù)據(jù)db.student.save(name:"沙和尚",sex:"男",age:25,address:"流沙河路 11 號(hào)");db.student.save(name:"",sex:"男",age:35,address:"東土大唐");db.student.save(name:"白骨精",sex:"女",age:18,addr
8、ess:"白骨洞");db.student.save(name:"",sex:"男",age:20,address:"西海");db.集合名稱.save(變量);3.3集合我們要某集合的所有文檔,使用 find()方法。語(yǔ)法格式為:例如,我們要student 集合中的所有文檔:這里你會(huì)發(fā)現(xiàn)每條文檔會(huì)有一個(gè)叫_id 的字段,這個(gè)相當(dāng)于我們?cè)瓉?lái)關(guān)系數(shù)據(jù)庫(kù)中表的主鍵,當(dāng)你在文檔時(shí)沒(méi)有指定該字段,MongDB 會(huì)自動(dòng)創(chuàng)建,其類型是 ObjectID 類型。如果我們?cè)谖臋n時(shí)指定該字段也可以,其類型可以使 ObjectID 類
9、型,也可以是MongoDB 支持的任意類型. 例如:我們?cè)俅蝑b.集合名稱.find();db.student.save(name:"哪吒",sex:"男",age:15,address:"蓮花灣小區(qū)");如果按一定條件來(lái),比如為“女”的,怎么辦?很簡(jiǎn)單!只要在 find()中添加參數(shù)即可,參數(shù)也是 json 格式,如下:為了避免游標(biāo)可能帶來(lái)的開銷,MongoDB 還提供了一個(gè)叫 findOne()的方法,用來(lái)返回結(jié)果集的第一條。為男的有很多條,這里只返回了第一條。當(dāng)我們需要返回結(jié)果的前幾條時(shí),可以使用 limit 方法,例如:3.4
10、 修改文檔我們要想修改,可以使用 update 方法 .例如:我姓名為什么?的學(xué)員文檔中的 age 字段值改為 31,執(zhí)行下列語(yǔ)句,看會(huì)發(fā)生再次:哦,悲劇了 原來(lái)的的文檔只剩下_id 和 age 兩個(gè)字段了。那如何保留其它字段值呢?我們需要使用 MongoDB 提供的修改器$set 來(lái)實(shí)現(xiàn),請(qǐng)看下列代碼。再次,會(huì)發(fā)現(xiàn)“豬八戒”文檔中原有的其它字段還保留下來(lái),而更新 age 字段也了。3.5 刪除文檔刪除文檔使用 remove()方法,格式為:請(qǐng)慎用 remove(), 它會(huì)一條不剩地的集合所有文檔刪的干干凈凈。我們現(xiàn)在演示一下,刪除 name 為“哪吒”的:再次,會(huì)發(fā)現(xiàn)哪吒的文檔不見了。4.高
11、級(jí)4.1 模糊MongoDB 的模糊是通過(guò)正則表達(dá)式的方式實(shí)現(xiàn)的。格式為:/模糊字符串/db.集合名稱.remove( 條件 );例如,我要student 集合中 address 字段中含有“洞”的所有文檔,代碼如下:如果要name 字段中以“白”開頭的,代碼如下:4.2 Null 值處理如果我們想找出集合中某字段值為空的文檔,如何是一樣的,條件值寫為 null 就可以了。呢?其實(shí)和我們之前的條件我們現(xiàn)在集合中的文檔都是沒(méi)有空值的,為了方便測(cè)試,現(xiàn)在數(shù)據(jù)做些修改:將“”的 address 改為空再次:我們會(huì)發(fā)現(xiàn)不僅會(huì)顯示“也出現(xiàn)了。也就是說(shuō),這種”這條文檔,之前因?yàn)樾薷膶?dǎo)致 address 字
12、段丟失的會(huì)出該字段為 null 的以及不存在該字段的文檔。4.3 大于小于<, <=, >, >= 這個(gè)操作符也是很常用的,格式如下db.collection.find( "field" : $gt: value ); / 大于: field > valuedb.collection.find( "field" : $lt: value ); / 小于: field < valuedb.collection.find( "field" : $gte: value ); / 大于等于: field &
13、gt;= valuedb.collection.find( "field" : $lte: value ); / 小于等于: field <= value示例:大于等于 20 歲的學(xué)員4.4 不等于不等于使用$ne 操作符。示例:sex 字段不為“男”的文檔4.5字段是否存在字段是否存在使用$exists 操作符。示例:所有含有 address 字符的文檔。示例:所有不含有 address 字符的文檔。4.6 包含與不包含包含使用$in 操作符。示例:student 集合中 age 字段包含 20,25,30 的文檔示例:student 集合中 age 字段不包含 2
14、0,25,30 的文檔4.7 統(tǒng)計(jì)條數(shù)統(tǒng)計(jì)條件使用 count()方法。示例:student 集合的文檔條數(shù)。示例:student 集合中 age 字段小于等于 20 的文檔條數(shù)。4.8 條件連接-并且我們?nèi)绻枰瑫r(shí)滿足兩個(gè)以上條件,需要使用$and 操作符將條件進(jìn)行關(guān)聯(lián)。(相當(dāng)于 SQL 的 and)格式為:$and: , 示例:student 集合中 age 大于等于 20 并且 age 小于 30 的文檔4.9 條件連接-或者如果兩個(gè)以上條件之間是或者的關(guān)系,我們使用$or 操作符進(jìn)行關(guān)聯(lián),與前面$and 的使用方式相同格式為:$or: , 示例:student 集合中 sex 為女,
15、或者小于 20 的文檔5.java 連接 MongoDB5.1文檔全部5.1.1(1)創(chuàng)建 maven 工程 mongoDBDemo ,引入依賴。<dependencies><dependency><groupId>org.mongodb</groupId><artifactId>mongodb-driver</artifactId><version>3.4.1</version>(2)編寫代碼,遍歷 student 集合所有數(shù)據(jù):MongoDB 的數(shù)字類型默認(rèn)使用 64 位浮點(diǎn)型數(shù)值?!皒”:3.
16、14或“x”:3。對(duì)于整型值,可以使用 NumberInt(4 字節(jié)符號(hào)整數(shù)),“x”:NumberInt(“3”) 或 NumberLong(8 字節(jié)符號(hào)整數(shù))“x”:NumberLong(“3”)5.1.2 匹配MongoDB 使用 BasicDBObject 類型封裝條件,構(gòu)造方法的參數(shù)為 key 和 value .示例:student 集合中 name 為豬八戒的文檔/構(gòu)建條件BasicDBObject bson=new BasicDBObject("name", "豬八戒"); FindIterable<Document> list
17、 = collection.find(bson);/獲取文檔集合/遍歷集合MongoClient client=new MongoClient();/創(chuàng)建連接對(duì)象MongoDatabase database = client.getDatabase("itcastdb");/獲取數(shù)據(jù)庫(kù)MongoCollection<Document> collection = database.getCollection("student");/獲取集合FindIterable<Document> list = collection.find()
18、;/獲取文檔集合for( Document doc: list)/遍歷集合中的文檔輸出數(shù)據(jù)System.out.println("name:"+ doc.getString("name") ); System.out.println("sex:"+ doc.getString("sex") ); System.out.println("age:"+ doc.getDouble("age") );/默認(rèn)為浮點(diǎn)型System.out.println("address:&
19、quot;+ doc.getString("address") ); System.out.println("");</dependency></dependencies>5.1.3 模糊構(gòu)建模糊條件是通過(guò)正則表達(dá)式的方式來(lái)實(shí)現(xiàn)的(1)完全匹配 Pattern pattern =pile("name$");(2)右匹配Pattern pattern =pile(".*name$");(3)左匹配Pattern pattern =pile("name.*$");(4)模糊匹
20、配 Pattern pattern =pile(".*name.*$");示例:模糊student 集合中 address中含有洞的文檔5.1.4 大于小于在 MongoDB 提示符下條件 json 字符串為 age: $lt BasicDBObject 的嵌套。 ,對(duì)應(yīng)的 java 代碼也是:20 示例:student 集合中 age 小于 20 的文檔5.1.5 條件連接-并且示例:大于等于 20 并且小于 30 的文檔/大于等于 20 的BasicDBObject bson1=new BasicDBObject("age", new BasicDB
21、Object("$gte",20);/小于 30 的BasicDBObject bson2=new BasicDBObject("age", new BasicDBObject("$lt",30);/小于 20 的BasicDBObject bson=new BasicDBObject("age", new BasicDBObject("$lt",20); FindIterable<Document> list = collection.find(bson);/獲取文檔集/遍歷集合/
22、模糊:like %洞%Pattern queryPattern =pile(".*洞.*$"); BasicDBObject bson=new BasicDBObject("address", queryPattern);FindIterable<Document> list = collection.find(bson);/獲取文檔集合/遍歷集合5.1.6 條件連接-或者示例:小于等于 20 或者為女的文檔5.2 增加文檔我們使用 insertOne 方法來(lái)文檔。示例:添加文檔-名稱:鐵扇公主:女:28地址:芭蕉洞/獲取連接MongoCli
23、ent client=new MongoClient();/得到數(shù)據(jù)庫(kù)MongoDatabase database = client.getDatabase("itcastdb");/得到集合封裝對(duì)象MongoCollection<Document> collection = database.getCollection("student"); Map<String, Object> map=new HashMap();map.put("name", "鐵扇公主");map.put(&quo
24、t;sex", "女");map.put("age", 35.0);map.put("address", "芭蕉洞"); Document doc=new Document(map); collection.insertOne(doc);/一條/collection.insertMany(documents);/多條文檔BasicDBObject bson1=new BasicDBObject("age", new BasicDBObject("$lte",20);
25、 BasicDBObject bson2=new BasicDBObject("sex", "女");/構(gòu)建條件orBasicDBObject bson=new BasicDBObject("$or", Arrays.asList( bson1, bson2 ) );/構(gòu)建條件andBasicDBObject bson=new BasicDBObject("$and", Arrays.asList(bson1,bson2) );5.3 刪除文檔示例:將名稱為鐵扇公主的文檔刪除5.4 修改文檔示例:將紅孩兒的地址修改
26、為“”/獲取連接MongoClient client=new MongoClient();/得到數(shù)據(jù)庫(kù)MongoDatabase database = client.getDatabase("itcastdb");/得到集合封裝對(duì)象MongoCollection<Document> collection = database.getCollection("student");/修改的條件BasicDBObject bson= new BasicDBObject("name", "紅孩兒");/修改后的值
27、BasicDBObject bson2 = new BasicDBObject("$set",new BasicDBObject("address", "");/參數(shù) 1:修改條件 參數(shù) 2:修改后的值collection.updateOne(bson, bson2);/collection.updateMany(filter, update);/修改符合條件的所有/獲取連接MongoClient client=new MongoClient();/得到數(shù)據(jù)庫(kù)MongoDatabase database = client.getDat
28、abase("itcastdb");/得到集合封裝對(duì)象MongoCollection<Document> collection = database.getCollection("student"); BasicDBObject bson=new BasicDBObject("name", "鐵扇公主"); collection.deleteOne(bson);/刪除(符合條件的第一條)/collection.deleteMany(bson);/刪除符合條件的全部updateMany 方法用于修改符合條
29、件的所有updateOne 方法用于修改符合條件的第一條6.MongoDB 連接池6.1 代碼實(shí)現(xiàn)MongoClient 被設(shè)計(jì)為線程安全的類,也就是我們?cè)谑褂迷擃悤r(shí)不需要考慮并發(fā)的情況,這樣我們可以考慮把 MongoClient 做成一個(gè)靜態(tài)變量,為所有線程公用,不必每次都銷毀。這樣可以極大提高執(zhí)行效率。實(shí)際上,這是 MongoDB 提供的內(nèi)置的連接池來(lái)實(shí)現(xiàn)的。首先我們先創(chuàng)建一個(gè)“管理類”,相當(dāng)于我們?cè)瓉?lái)的 BaseDaopackage cn.itcast.demo;import com.mongodb.MongoClient;import com.mongodb.MongoClientOp
30、tions;import com.mongodb.MongoClientOptions.Builder;import com.mongodb.WriteConcern;import com.mongodb.client.MongoDatabase;public class MongoManager private static MongoClient mongoClient=null;/對(duì)mongoClient 初始化private static void init()mongoClient=new MongoClient();public static MongoDatabase getDa
31、tabase()if(mongoClient=null)init();然后我們創(chuàng)建一個(gè) StudentDao我們現(xiàn)在做個(gè)測(cè)試,循環(huán)2 萬(wàn)條數(shù)據(jù),看看執(zhí)行時(shí)間是多長(zhǎng)時(shí)間package cn.itcast.demo;package cn.itcast.demo;import org.bson.Document;import com.mongodb.client.MongoCollection;import com.mongodb.client.MongoDatabase;/* 學(xué)員數(shù)據(jù)層* author Administrator*/public class StudentDao public v
32、oid save(String name,String sex,double age,String address) MongoDatabase database = MongoManager.getDatabase(); MongoCollection<Document> collection = database.getCollection("student2"); Document docment=new Document();docment.put("name", name); docment.put("sex",
33、 sex);docment.put("age", age); docment.put("address", address); collection.insertOne(docment);return mongoClient.getDatabase("itcastdb");經(jīng)過(guò)測(cè)試:所用毫秒數(shù)為 35896.2 參數(shù)設(shè)置我們?cè)趧偛诺拇a基礎(chǔ)上進(jìn)行連接池參數(shù)的設(shè)置修改 MongoManager 的 init 方法/對(duì)mongoClient 初始化private static void init()/連接池選項(xiàng)Builder builde
34、r = new MongoClientOptions.Builder();/選項(xiàng)構(gòu)建者builder.connectTimeout(5000);/設(shè)置連接超時(shí)時(shí)間builder.socketTimeout(5000);/數(shù)據(jù)的超時(shí)時(shí)間builder.connectionsPerHost(30);/每個(gè)地址最大請(qǐng)求數(shù)builder.writeConcern(WriteConcern.NORMAL);/寫入策略,僅拋出網(wǎng)絡(luò)異常MongoClientOptions options = builder.build();mongoClient=new MongoClient("127.0.0.
35、1",options);import java.util.Date;public class TestPool public static void main(String args) long startTime = new Date().getTime();/開始時(shí)間StudentDao studentDao=new StudentDao();for(int i=0;i<20000;i+)studentDao.save("測(cè)試"+i, "男", 25.0, "測(cè)試地址"+i);long endTime = new
36、Date().getTime();/完成時(shí)間System.out.println("完成時(shí)間:"+(endTime-startTime)+"毫秒");再次進(jìn)試:所用的毫秒 1544下面是寫入策略。WriteConcern.NONE:沒(méi)有異常拋出WriteConcern.NORMAL:僅拋出網(wǎng)絡(luò)錯(cuò)誤異常,沒(méi)有服務(wù)器錯(cuò)誤異常WriteConcern.SAFE:拋出網(wǎng)絡(luò)錯(cuò)誤異常、服務(wù)器錯(cuò)誤異常;并等待服務(wù)器完成寫操作。WriteConcern.MAJORITY: 拋出網(wǎng)絡(luò)錯(cuò)誤異常、服務(wù)器錯(cuò)誤異常;并等待一個(gè)主服務(wù)器完成寫操作。WriteConcern.FSYN
37、C_SAFE: 拋出網(wǎng)絡(luò)錯(cuò)誤異常、服務(wù)器錯(cuò)誤異常;寫操作等待服務(wù)器將數(shù)據(jù)刷新到磁盤。WriteConcern.JOURNAL_SAFE:拋出網(wǎng)絡(luò)錯(cuò)誤異常、服務(wù)器錯(cuò)誤異常;寫操作等待服務(wù)器提交到磁盤的日志文件。WriteConcern.REPLICAS_SAFE:拋出網(wǎng)絡(luò)錯(cuò)誤異常、服務(wù)器錯(cuò)誤異常;等待至少 2 臺(tái)服務(wù)器完成寫操作。7.綜合案例-點(diǎn)擊日志分析組件7.1 需求分析花生二手車日IP 高達(dá) 2 萬(wàn)+ ,每秒點(diǎn)擊頻率在 2000 次左右。為了能夠?qū)τ脩舻男袨樽鲞M(jìn)一步的分析,部提出需求,用戶每次點(diǎn)擊瀏覽二手車都要該用戶 ID、IP、時(shí)間、點(diǎn)擊車型、點(diǎn)擊商品 ID、價(jià)格等信息。7.2 數(shù)據(jù)庫(kù)設(shè)
38、計(jì)瀏覽日志 browseLog7.3 日志寫入(1)創(chuàng)建工程 sitelog ,在 pom.xml 中引入依賴。(2)在 src/main/resources 添加配置文件 perties這個(gè)配置文件用于配置主機(jī)地址和端口(3)創(chuàng)建包 com.huasheng.sitelog,建立 Config 類,用于配置文件package com.huasheng.sitelog;host=port=27017<dependencies><dependency><groupId>org.mongodb</groupId>
39、;<artifactId>mongodb-driver</artifactId><version>3.4.1</version></dependency></dependencies>字段名稱字段類型字段含義userid字符用戶 IDip字符IPbrowseTime時(shí)間時(shí)間m字符點(diǎn)擊車型goodsid字符點(diǎn)擊商品 IDprice數(shù)值價(jià)格remark字符備注import java.io.IOException; import java.io.InputStream; import java.util.Properties;/
40、* 配置類* author Administrator*/public class Config statictry Properties p=new Properties();InputStream input=Config.class.getResourceAsStream("/pertis");p.load(input);host=p.getProperty("host"); port=Integer.parseInt( p.getProperty("port"); input.close(); catch
41、 (IOException e) e.printStackTrace();/加載private static String host;/主機(jī)地址private static int port;/端口public static String getHost() return host;(4)創(chuàng)建管理類package com.huasheng.sitelog;import com.mongodb.MongoClient;import com.mongodb.MongoClientOptions;import com.mongodb.MongoClientOptions.Builder;import
42、 com.mongodb.ServerAddress;import com.mongodb.WriteConcern;import com.mongodb.client.MongoDatabase;/* Mongo 數(shù)據(jù)庫(kù)連接管理類* author Administrator*/public class MongoManager private static MongoClient mongoClient=null;/初始化private static void init()/創(chuàng)建一個(gè)選項(xiàng)構(gòu)造器Builder builder = new MongoClientOptions.Builder()
43、;public static int getPort() return port;(5)日志工具類package com.huasheng.sitelog;import java.util.Map;import org.bson.Document;import com.mongodb.client.MongoCollection;import com.mongodb.client.MongoDatabase;/* 站點(diǎn)日志數(shù)據(jù)工具類* author Administratorbuilder.connectTimeout(5000);/設(shè)置連接超時(shí)時(shí)間builder.socketTimeout(
44、5000);/數(shù)據(jù)的超時(shí)時(shí)間builder.connectionsPerHost(30);/設(shè)置每個(gè)地址最大連接數(shù)builder.writeConcern(WriteConcern.NORMAL);/設(shè)置寫入策略 ,只有網(wǎng)絡(luò)異常出/得到選項(xiàng)封裝MongoClientOptions options = builder.build();mongoClient=new MongoClient(new ServerAddress(Config.getHost(), Config.getPort(),options);public static MongoDatabase getDatabase()if
45、(mongoClient=null)init();return mongoClient.getDatabase("itcastdb");(6)編寫測(cè)試代碼Map map=new HashMap(); map.put("userid", "8888");map.put("ip", "");map.put("browseTime", new Date(); map.put("m", "大眾");map.put(&q
46、uot;goodsid", "123123");map.put("price", 15.3);map.put("remark", "八成新,賤賣了"); SiteLogUtil.save("browseLog", map);/存入日志*/public class SiteLogUtil /* 寫入日志* param logname 日志名稱* param map 日志數(shù)據(jù)*/public static void save(String logname,Map<String, Ob
47、ject> map)MongoDatabase database = MongoManager.getDatabase(); MongoCollection<Document> collection = database.getCollection(logname); Document doc=new Document(map);collection.insertOne(doc);7.4 日志7.4.1 條件(1)在 SiteLogUtil 類中添加方法(2)編寫測(cè)試代碼7.4.2 分頁(yè)(1)在 SiteLogUtil 類中添加方法/* 分頁(yè)日志Map<String,
48、Object> map =new HashMap(); map.put("userid", "8888");FindIterable<Document> list = SiteLogUtil.list("browseLog", map); String json = JSON.serialize(list);System.out.println(json);/* 按條件* param logName* param map* return*/public static FindIterable<Document> list(String logName,Map<String, Object> map) MongoDatabase database = MongoManager.getDatabase(); M
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年學(xué)生寢室衛(wèi)生的管理制度細(xì)則
- 速寫的課程設(shè)計(jì)
- 二零二五版電商平臺(tái)電商平臺(tái)數(shù)據(jù)分析與產(chǎn)品優(yōu)化合同3篇
- 年度特種變壓器戰(zhàn)略市場(chǎng)規(guī)劃報(bào)告
- 2025年度社區(qū)停車位產(chǎn)權(quán)轉(zhuǎn)讓協(xié)議范本4篇
- 2025年度鋅錠國(guó)際貿(mào)易結(jié)算服務(wù)合同3篇
- 2025年度智能大樓能源管理系統(tǒng)施工合同4篇
- 老虎畫畫賀卡課程設(shè)計(jì)
- 二零二五版共享單車運(yùn)營(yíng)管理服務(wù)合同4篇
- 2025年度個(gè)人別墅買賣合同范本8篇
- 《酸堿罐區(qū)設(shè)計(jì)規(guī)范》編制說(shuō)明
- 橋梁監(jiān)測(cè)監(jiān)控實(shí)施方案
- 書籍小兵張嘎課件
- 藝術(shù)哲學(xué):美是如何誕生的學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 北京海淀區(qū)2025屆高三下第一次模擬語(yǔ)文試題含解析
- 量子醫(yī)學(xué)治療學(xué)行業(yè)投資機(jī)會(huì)分析與策略研究報(bào)告
- 多重耐藥菌病人的管理-(1)課件
- (高清版)TDT 1056-2019 縣級(jí)國(guó)土資源調(diào)查生產(chǎn)成本定額
- 環(huán)境監(jiān)測(cè)對(duì)環(huán)境保護(hù)的意義
- 2023年數(shù)學(xué)競(jìng)賽AMC8試卷(含答案)
- 2023年十天突破公務(wù)員面試
評(píng)論
0/150
提交評(píng)論