MongoDB一些概念
下面以MongoDB和MySql的對比來說明
MySQL MongoDB
database(數據庫) db(數據庫)
table(表) collection(集合)
row(行記錄) document(文檔)
column(列) field(字段)
primary key(指定主鍵) "_id" : ObjectId("******") 自動生成內置主鍵
Mysql的數據形式如下
同樣的數據在MongoDB下類似于JSON鍵值對,叫BSON,如下
MongoDB的CRUD
windows下安裝成功后,使用mongod命令啟動服務,使用mongo命令默認連接到test庫
1,創建集合
創建user集合:db.createCollection("user") //不需要定義字段
2,插入
插入name=wangxu,age=27的記錄:db.user.insert({"name":"wangxu","age":27})
3,查詢
查詢全部:db.user.find()
查詢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調用MongoDB
引入MongoDB的Java驅動包后,測試代碼如下:
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; /** * 測試mongodb 測試點:增加,查詢,更新,刪除 * * @author wangxu * @date 2016-3-27 */ public class TestMongoDB { public static void main(String[] args) { // 建立連接,MongoDB默認是沒有用戶名及密碼 MongoClient mongoClient = new MongoClient( "localhost" , 27017 ); // 獲取test庫 MongoDatabase db = mongoClient.getDatabase( "test" ); // 創建集合 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 ))); // 查詢文檔 FindIterable<Document> findIterable = collection.find(); MongoCursor<Document> mongoCursor = findIterable.iterator(); // 遍歷游標 while (mongoCursor.hasNext()) { Document doc = mongoCursor.next(); System.out.println( "name=" + doc.get( "name" )); } // 刪除wangxu_java collection.deleteMany(Filters.eq( "name" , "wangxu_java" )); } } |
關于Java驅動包的一個疑問
1
|
MongoClient mongoClient = new MongoClient( "域不存在" , 27017 ); //建立連接 |
當我保存上面的代碼時,發現不需要處理異常,開始我以為異常被設計成了“非檢查異常”,運行時會拋出來,最后測試發現根本不會拋任何異常,后續的CRUD操作時會拋異常,但幾乎都是非檢查異常,個人感覺這種設計是不是有點不符合Java的異常分類機制?