本博文介紹了MongoDB,,并詳細(xì)指引讀者在Ubuntu下MongoDB的安裝和使用。本教程在Ubuntu14.04下測(cè)試通過,。 一,、MongoDB介紹MongoDB 是一個(gè)是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫,介于關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間,,是非關(guān)系數(shù)據(jù)庫當(dāng)中功能最豐富,,最像關(guān)系數(shù)據(jù)庫的。他支持的數(shù)據(jù)結(jié)構(gòu)非常松散,,是類似json的bson格式,,因此可以存儲(chǔ)比較復(fù)雜的數(shù)據(jù)類型。Mongo最大的特點(diǎn)是他支持的查詢語言非常強(qiáng)大,,其語法有點(diǎn)類似于面向?qū)ο蟮牟樵冋Z言,,幾乎可以實(shí)現(xiàn)類似關(guān)系數(shù)據(jù)庫單表查詢的絕大部分功能,而且還支持對(duì)數(shù)據(jù)建立索引,。 二,、安裝MongoDBMongoDB安裝很簡單,無需下載源文件,,可以直接用apt-get命令進(jìn)行安裝,。 sudo apt-get install mongodb
截圖如下: mongo -version
輸出版本信息,,表明安裝成功,截圖如下: service mongodb start
service mongodb stop
截圖如下: pgrep mongo -l #注意:-l是英文字母l,,不是阿拉伯?dāng)?shù)字1
截圖如下: sudo apt-get --purge remove mongodb mongodb-clients mongodb-server
三、使用MongoDBshell命令模式輸入 常用操作命令:數(shù)據(jù)庫相關(guān) use School #切換到School數(shù)據(jù)庫。MongoDB 無需預(yù)創(chuàng)建School數(shù)據(jù)庫,,在使用時(shí)會(huì)自動(dòng)創(chuàng)建
2,、創(chuàng)建Collection db.createCollection('teacher') #創(chuàng)建一個(gè)聚集集合。MongoDB 其實(shí)在插入數(shù)據(jù)的時(shí)候,,也會(huì)自動(dòng)創(chuàng)建對(duì)應(yīng)的集合,,無需預(yù)定義集合
截圖如下: db.student.insert({_id:1, sname: 'zhangsan', sage: 20}) #_id可選
db.student.save({_id:1, sname: 'zhangsan', sage: 22}) #_id可選
這兩種方式,,其插入的數(shù)據(jù)中_id字段均可不寫,,會(huì)自動(dòng)生成一個(gè)唯一的_id來標(biāo)識(shí)本條數(shù)據(jù)。而insert和save不同之處在于:在手動(dòng)插入_id字段時(shí),,如果_id已經(jīng)存在,,insert不做操作,save做更新操作,;如果不加_id字段,,兩者作用相同都是插入數(shù)據(jù)。截圖如下: db.student.find() #查詢所有記錄,。相當(dāng)于:select * from student
db.student.find({sname: 'lisi'}) #查詢sname='lisi'的記錄,。相當(dāng)于: select * from student where sname='lisi'
db.student.find({},{sname:1, sage:1}) #查詢指定列sname、sage數(shù)據(jù),。相當(dāng)于:select sname,sage from student,。sname:1表示返回sname列,默認(rèn)_id字段也是返回的,,可以添加_id:0(意為不返回_id)寫成{sname: 1, sage: 1,_id:0},,就不會(huì)返回默認(rèn)的_id字段了
db.student.find({sname: 'zhangsan', sage: 22}) #and 與條件查詢。相當(dāng)于:select * from student where sname = 'zhangsan' and sage = 22
db.student.find({$or: [{sage: 22}, {sage: 25}]}) #or 條件查詢,。相當(dāng)于:select * from student where sage = 22 or sage = 25
查詢操作類似,,這里只給出 4,、修改數(shù)據(jù) db.student.update({sname: 'lisi'}, {$set: {sage: 30}}, false, true) #相當(dāng)于:update student set sage =30 where sname = 'lisi';
操作截圖如下: db.student.remove({sname: 'chenliu'}) #相當(dāng)于:delete from student where sname='chenliu'
操作截圖如下: 注意:MongoDB相較安全性更偏向易用性,,默認(rèn)是沒有開啟用戶權(quán)限的,如果想開啟用戶權(quán)限,,可以參考Ubuntu下開啟MongoDB用戶權(quán)限,。 Java API編程實(shí)例第一步:下載Java MongoDB Driver驅(qū)動(dòng)jar包,Java MongoDB Driver下載地址,,默認(rèn)的下載目錄為~/下載或者~/Downloads import java.util.ArrayList;
import java.util.List;
import org.bson.Document;
import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Filters;
public class TestMongoDB {
/**
* @param args
*/
public static void main(String[] args) {
insert();//插入數(shù)據(jù),。執(zhí)行插入時(shí),,可將其他三句函數(shù)調(diào)用語句注釋掉,下同
// find(); //查找數(shù)據(jù)
// update();//更新數(shù)據(jù)
// delete();//刪除數(shù)據(jù)
}
/**
* 返回指定數(shù)據(jù)庫中的指定集合
* @param dbname 數(shù)據(jù)庫名
* @param collectionname 集合名
* @return
*/
//MongoDB無需預(yù)定義數(shù)據(jù)庫和集合,在使用的時(shí)候會(huì)自動(dòng)創(chuàng)建
public static MongoCollection<Document> getCollection(String dbname,String collectionname){
//實(shí)例化一個(gè)mongo客戶端,服務(wù)器地址:localhost(本地),,端口號(hào):27017
MongoClient mongoClient=new MongoClient('localhost',27017);
//實(shí)例化一個(gè)mongo數(shù)據(jù)庫
MongoDatabase mongoDatabase = mongoClient.getDatabase(dbname);
//獲取數(shù)據(jù)庫中某個(gè)集合
MongoCollection<Document> collection = mongoDatabase.getCollection(collectionname);
return collection;
}
/**
* 插入數(shù)據(jù)
*/
public static void insert(){
try{
//連接MongoDB,,指定連接數(shù)據(jù)庫名,指定連接表名,。
MongoCollection<Document> collection= getCollection('test','student');
//實(shí)例化一個(gè)文檔,文檔內(nèi)容為{sname:'Mary',sage:25},如果還有其他字段,,可以繼續(xù)追加append
Document doc1=new Document('sname','Mary').append('sage', 25);
//實(shí)例化一個(gè)文檔,文檔內(nèi)容為{sname:'Bob',sage:20}
Document doc2=new Document('sname','Bob').append('sage', 20);
List<Document> documents = new ArrayList<Document>();
//將doc1,、doc2加入到documents列表中
documents.add(doc1);
documents.add(doc2);
//將documents插入集合
collection.insertMany(documents);
System.out.println('插入成功');
}catch(Exception e){
System.err.println( e.getClass().getName() ': ' e.getMessage() );
}
}
/**
* 查詢數(shù)據(jù)
*/
public static void find(){
try{
MongoCollection<Document> collection = getCollection('test','student');
//通過游標(biāo)遍歷檢索出的文檔集合
// MongoCursor<Document> cursor= collection.find(new Document('sname','Mary')). projection(new Document('sname',1).append('sage',1).append('_id', 0)).iterator(); //find查詢條件:sname='Mary'。projection篩選:顯示sname和sage,不顯示_id(_id默認(rèn)會(huì)顯示)
//查詢所有數(shù)據(jù)
MongoCursor<Document> cursor= collection.find().iterator();
while(cursor.hasNext()){
System.out.println(cursor.next().toJson());
}
}catch(Exception e){
System.err.println( e.getClass().getName() ': ' e.getMessage() );
}
}
/**
* 更新數(shù)據(jù)
*/
public static void update(){
try{
MongoCollection<Document> collection = getCollection('test','student');
//更新文檔 將文檔中sname='Mary'的文檔修改為sage=22
collection.updateMany(Filters.eq('sname', 'Mary'), new Document('$set',new Document('sage',22)));
System.out.println('更新成功,!');
}catch(Exception e){
System.err.println( e.getClass().getName() ': ' e.getMessage() );
}
}
/**
* 刪除數(shù)據(jù)
*/
public static void delete(){
try{
MongoCollection<Document> collection = getCollection('test','student');
//刪除符合條件的第一個(gè)文檔
collection.deleteOne(Filters.eq('sname', 'Bob'));
//刪除所有符合條件的文檔
//collection.deleteMany (Filters.eq('sname', 'Bob'));
System.out.println('刪除成功,!');
}catch(Exception e){
System.err.println( e.getClass().getName() ': ' e.getMessage() );
}
}
}
每次執(zhí)行完程序,都可以返回shell模式查看結(jié)果,。如:在eclipse執(zhí)行完更新操作后,,在shell模式輸入 |
|