前言
最近接到一個需求,要做MongoDB打點(diǎn)數(shù)據(jù)的統(tǒng)計(jì),在學(xué)習(xí)過MongoDB的操作之后,封裝了一個MongoDB的操作類,分為兩部分,基本思想是參照了自己寫過的mysql的操作類。一個是基本的操作類,包括所有基本操作的靜態(tài)方法,還有一個是mongoobject,就是具體操作的實(shí)現(xiàn)類。
以后再寫如何用spring boot寫一個簡單的統(tǒng)計(jì)服務(wù)。
MongoDB操作類封裝
mongobase代碼如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
|
package com.fun.mongodb; import com.fun.frame.SourceCode; import com.mongodb.MongoClient; import com.mongodb.MongoClientURI; import com.mongodb.MongoCredential; import com.mongodb.ServerAddress; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import org.bson.Document; import java.util.Arrays; import java.util.List; /** * mongo操作類的基礎(chǔ)類 */ public class MongoBase extends SourceCode { /** * 獲取服務(wù)地址list * * @param addresses * @return */ public static List<ServerAddress> getServers(ServerAddress... addresses) { return Arrays.asList(addresses); } /** * 獲取服務(wù)地址 * * @param host * @param port * @return */ public static ServerAddress getServerAdress(String host, int port) { return new ServerAddress(host, port); } /** * 獲取認(rèn)證list * * @param credentials * @return */ public static List<MongoCredential> getCredentials(MongoCredential... credentials) { return Arrays.asList(credentials); } /** * 獲取驗(yàn)證 * * @param userName * @param database * @param password * @return */ public static MongoCredential getMongoCredential(String userName, String database, String password) { return MongoCredential.createCredential(userName, database, password.toCharArray()); } /** * 獲取mongo客戶端 * * @param addresses * @param credentials * @return */ public static MongoClient getMongoClient(List<ServerAddress> addresses, List<MongoCredential> credentials) { return new MongoClient(addresses, credentials); } /** * 連接mongo數(shù)據(jù)庫 * * @param mongoClient * @param databaseName * @return */ public static MongoDatabase getMongoDatabase(MongoClient mongoClient, String databaseName) { return mongoClient.getDatabase(databaseName); } /** * 連接mongo集 * * @param mongoDatabase * @param collectionName * @return */ public static MongoCollection<Document> getMongoCollection(MongoDatabase mongoDatabase, String collectionName) { return mongoDatabase.getCollection(collectionName); } /** * 關(guān)閉數(shù)據(jù)庫連接 * * @param mongoClient */ public static void MongoOver(MongoClient mongoClient) { mongoClient.close(); } /** * 獲取mongo客戶端對象,通過servers和credentials對象創(chuàng)建 * * @param mongoObject * @return */ public static MongoClient getMongoClient(MongoObject mongoObject) { MongoClient mongoClient = new MongoClient(getServers(getServerAdress(mongoObject.host, mongoObject.port)), getCredentials(getMongoCredential(mongoObject.user, mongoObject.database, mongoObject.password))); return mongoClient; } /** * 獲取mongo客戶端對象,通過uri方式連接 * * @param mongoObject * @return */ public static MongoClient getMongoClientOnline(MongoObject mongoObject) { String format = String.format( "mongodb://%s:%s@%s:%d/%s" , mongoObject.user, mongoObject.password, mongoObject.host, mongoObject.port, mongoObject.database); return new MongoClient( new MongoClientURI(format)); } /** * 獲取collection對象 * * @param mongoObject * @return */ public static MongoCollection<Document> getCollection(MongoObject mongoObject, String collectionName) { return getMongoClient(mongoObject).getDatabase(mongoObject.database).getCollection(collectionName); } /** * 獲取collection對象 * * @param mongoObject * @return */ public static MongoCollection<Document> getCollectionOnline(MongoObject mongoObject, String collectionName) { return getMongoClientOnline(mongoObject).getDatabase(mongoObject.database).getCollection(collectionName); } } |
mongoobject的代碼如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
package com.fun.mongodb; import com.mongodb.MongoClient; import com.mongodb.client.MongoCollection; import org.bson.Document; /** * mongo數(shù)據(jù)庫配置對象,針對單個數(shù)據(jù)服務(wù),單個身份驗(yàn)證 */ public class MongoObject extends MongoBase { String host; int port; String user; String password; String database; MongoClient mongoClient; /** * 創(chuàng)建數(shù)據(jù)連接 * * @param host * @param port * @param user * @param password * @param database */ public MongoObject(String host, int port, String user, String password, String database) { this .host = host; this .port = port; this .user = user; this .password = password; this .database = database; this .mongoClient = getMongoClient( this ); } /** * 創(chuàng)建數(shù)據(jù)庫連接 * * @param port * @param host * @param user * @param password * @param database */ public MongoObject( int port, String host, String user, String password, String database) { this .host = host; this .port = port; this .user = user; this .password = password; this .database = database; this .mongoClient = getMongoClientOnline( this ); } /** * 獲取colletion對象 * * @param collectionName * @return */ public MongoCollection<Document> getMongoCollection(String collectionName) { MongoClient mongoClientOnline = getMongoClientOnline( this ); return mongoClientOnline.getDatabase(database).getCollection(collectionName); } /** * 關(guān)閉連接 */ public void over() { MongoOver( this .mongoClient); } } @Override public MongoObject clone() { return new MongoObject( this .host, this .port, this .user, this .password, this .database); } public MongoObject clone2() { return new MongoObject( this .port, this .host, this .user, this .password, this .database); } |
具體效果非常不錯,測試代碼如下:
1
2
3
4
5
6
7
|
public static void main(String[] args) { MongoObject ready = new MongoObject( "*****" , 5117 , "fission_record" , "fission_record" , "fission_record" ); MongoCollection<Document> app = ready.getMongoCollection( "app_logs_20181109" ); Document first = app.find().first(); output(first); ready.over(); } |
打印內(nèi)容如下:
Document{{_id=5be4ce052ce01b21b6c26a64, _class=com.fission.next.record.bean.AppRecordBean, user_id=5482, action_type={"gameId":2,"userId":"5482"}, action_extern=DataSta_Game_Starts, client_version=15, client_ip=114.5.146.239, client_imei=UNKNOWN, client_dev=xiaomi-Redmi 5 Plus, client_type=200, server_time=1541721601655, os_name=200, os_version=15, client_time=1541721577025}}
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對服務(wù)器之家的支持。
原文鏈接:https://segmentfault.com/a/1190000019996873