Java 連線 Mongodb 增刪改查操作
阿新 • • 發佈:2018-12-24
對於NoSQL並沒有一個明確的範圍和定義,但是他們都普遍存在下面一些共同特徵:
- 不需要預定義模式:不需要事先定義資料模式,預定義表結構。資料中的每條記錄都可能有不同的屬性和格式。當插入資料時,並不需要預先定義它們的模式。
- 無共享架構:相對於將所有資料儲存的儲存區域網路中的全共享架構。NoSQL往往將資料劃分後儲存在各個本地伺服器上。因為從本地磁碟讀取資料的效能往往好於通過網路傳輸讀取資料的效能,從而提高了系統的效能。
- 彈性可擴充套件:可以在系統執行的時候,動態增加或者刪除結點。不需要停機維護,資料可以自動遷移。
- 分割槽:相對於將資料存放於同一個節點,NoSQL資料庫需要將資料進行分割槽,將記錄分散在多個節點上面。並且通常分割槽的同時還要做複製。這樣既提高了並行效能,又能保證沒有單點失效的問題。
- 非同步複製:和RAID儲存系統不同的是,NoSQL中的複製,往往是基於日誌的非同步複製。這樣,資料就可以儘快地寫入一個節點,而不會被網路傳輸引起遲延。缺點是並不總是能保證一致性,這樣的方式在出現故障的時候,可能會丟失少量的資料。
- BASE:相對於事務嚴格的ACID特性,NoSQL資料庫保證的是BASE特性。BASE是最終一致性和軟事務。
Mongodb是Nosql的比較方便成熟的一種資料庫
程式碼部分
public class DbNopass {
private String ip = "localhost";
private Integer port = 27017;
private MongoClient mongoClient;
private MongoDatabase mongoDatabase;
private MongoCollection<Document> collection;
/**
* 連線DB
*/
public void connectDb() {
mongoClient = new MongoClient(ip, port);
mongoDatabase = mongoClient.getDatabase("mycol" );
System.out.println("------連線資料庫成功------");
collection = mongoDatabase.getCollection("test");
System.out.println("------集合 test 選擇成功------\r\n");
}
/**
* 建立集合
*/
public void createCollection() {
mongoDatabase.createCollection("test");
System.out.println("------集合test建立成功------\r\n");
}
/**
* 插入文件
*/
public void insertDocument() {
/**
* 1. 建立文件 org.bson.Document 引數為key-value的格式 2. 建立文件集合List<Document> 3.
* 將文件集合插入資料庫集合中 mongoCollection.insertMany(List<Document>) 插入單個文件可以用
* mongoCollection.insertOne(Document)
*/
Document document = new Document("title", "MongoDB").append("description", "database").append("likes", 100)
.append("by", "Fly");
List<Document> documents = new ArrayList<Document>();
documents.add(document);
collection.insertMany(documents);
System.out.println("------文件插入成功------\r\n");
}
/*
* 查詢
*/
public void select(){
//檢索所有文件
/**
* 1. 獲取迭代器FindIterable<Document>
* 2. 獲取遊標MongoCursor<Document>
* 3. 通過遊標遍歷檢索出的文件集合
* */
FindIterable<Document> findIterable = collection.find();
MongoCursor<Document> mongoCursor = findIterable.iterator();
System.out.println("------查詢結果------");
while(mongoCursor.hasNext()){
System.out.println(mongoCursor.next());
}
System.out.println("\r\n");
}
/*
* 更新
*/
public void update(){
//更新文件 將文件中likes=100的文件修改為likes=200
collection.updateMany(Filters.eq("likes", 100), new Document("$set",new Document("likes",200)));
//檢索檢視結果
FindIterable<Document> findIterable = collection.find();
MongoCursor<Document> mongoCursor = findIterable.iterator();
System.out.println("------檢視更新之後的資料------");
while(mongoCursor.hasNext()){
System.out.println(mongoCursor.next());
}
System.out.println("\r\n");
}
/*
* 刪除
*/
public void delete(){
//刪除符合條件的第一個文件
collection.deleteOne(Filters.eq("likes", 200));
//刪除所有符合條件的文件
collection.deleteMany (Filters.eq("likes", 200));
//檢索檢視結果
FindIterable<Document> findIterable = collection.find();
MongoCursor<Document> mongoCursor = findIterable.iterator();
System.out.println("------檢視刪除之後的資料------");
while(mongoCursor.hasNext()){
System.out.println(mongoCursor.next());
}
System.out.println("\r\n");
}
public static void main(String args[]) {
DbNopass db = new DbNopass();
db.connectDb();
db.createCollection();
db.insertDocument();
db.select();
db.update();
db.delete();
}
}