MongoDB一些概念
下面以MongoDB和MySql的對(duì)比來(lái)說(shuō)明
MySQL MongoDB
database(數(shù)據(jù)庫(kù)) db(數(shù)據(jù)庫(kù))
table(表) collection(集合)
row(行記錄) document(文檔)
column(列) field(字段)
primary key(指定主鍵) "_id" : ObjectId("******") 自動(dòng)生成內(nèi)置主鍵
Mysql的數(shù)據(jù)形式如下
同樣的數(shù)據(jù)在MongoDB下類(lèi)似于JSON鍵值對(duì),叫BSON,如下
MongoDB的CRUD
windows下安裝成功后,使用mongod命令啟動(dòng)服務(wù),使用mongo命令默認(rèn)連接到test庫(kù)
1,創(chuàng)建集合
創(chuàng)建user集合:db.createCollection("user") //不需要定義字段
2,插入
插入name=wangxu,age=27的記錄:db.user.insert({"name":"wangxu","age":27})
3,查詢(xún)
查詢(xún)?nèi)浚篸b.user.find()
查詢(xún)name=wangxu的記錄:db.user.find({"name":"wangxu"})
4,更新
將name=wangxu的記錄age更新成30:db.user.update({name:"wangxu"},{"$set":{"age":30}})
5,刪除
刪除name=wangxu的記錄:db.user.remove({"name":"wangxu"})
刪除全部:db.user.remove()
6,刪除集合
刪除user集合: db.user.drop()
Java調(diào)用MongoDB
引入MongoDB的Java驅(qū)動(dòng)包后,測(cè)試代碼如下:
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
|
package com.wx.test; import java.util.ArrayList; import java.util.List; import org.bson.Document; import com.mongodb.MongoClient; import com.mongodb.client.FindIterable; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoCursor; import com.mongodb.client.MongoDatabase; import com.mongodb.client.model.Filters; /** * 測(cè)試mongodb 測(cè)試點(diǎn):增加,查詢(xún),更新,刪除 * * @author wangxu * @date 2016-3-27 */ public class TestMongoDB { public static void main(String[] args) { // 建立連接,MongoDB默認(rèn)是沒(méi)有用戶(hù)名及密碼 MongoClient mongoClient = new MongoClient( "localhost" , 27017 ); // 獲取test庫(kù) MongoDatabase db = mongoClient.getDatabase( "test" ); // 創(chuàng)建集合 db.createCollection( "user" ); // 獲取集合 MongoCollection collection = db.getCollection( "user" ); // 插入文檔(支持多條) Document document = new Document( "name" , "wangxu" ).append( "age" , "27" ); Document document2 = new Document( "name" , "wangxu_java" ).append( "age" , "27" ); List<Document> documents = new ArrayList<>(); documents.add(document); documents.add(document2); collection.insertMany(documents); // 更新wangxu的age為30 collection.updateMany(Filters.eq( "name" , "wangxu" ), new Document( "$set" , new Document( "age" , 30 ))); // 查詢(xún)文檔 FindIterable<Document> findIterable = collection.find(); MongoCursor<Document> mongoCursor = findIterable.iterator(); // 遍歷游標(biāo) while (mongoCursor.hasNext()) { Document doc = mongoCursor.next(); System.out.println( "name=" + doc.get( "name" )); } // 刪除wangxu_java collection.deleteMany(Filters.eq( "name" , "wangxu_java" )); } } |
關(guān)于Java驅(qū)動(dòng)包的一個(gè)疑問(wèn)
1
|
MongoClient mongoClient = new MongoClient( "域不存在" , 27017 ); //建立連接 |
當(dāng)我保存上面的代碼時(shí),發(fā)現(xiàn)不需要處理異常,開(kāi)始我以為異常被設(shè)計(jì)成了“非檢查異常”,運(yùn)行時(shí)會(huì)拋出來(lái),最后測(cè)試發(fā)現(xiàn)根本不會(huì)拋任何異常,后續(xù)的CRUD操作時(shí)會(huì)拋異常,但幾乎都是非檢查異常,個(gè)人感覺(jué)這種設(shè)計(jì)是不是有點(diǎn)不符合Java的異常分類(lèi)機(jī)制?