JAVA操作MongoDB數(shù)據(jù)庫(kù)實(shí)例教程
前言:
mongodb是一個(gè)基于分布式文件存儲(chǔ)的開(kāi)源數(shù)據(jù)庫(kù)系統(tǒng)。
mongodb與我們平常使用的mysql的區(qū)別:
1.MySQL以表結(jié)構(gòu)存儲(chǔ)數(shù)據(jù),mongodb以類JSON的文檔的格式存儲(chǔ)
2.MySQL支持表聯(lián)查,mongodb不支持表聯(lián)查。
3.MySQL是關(guān)系型數(shù)據(jù)庫(kù),而mongodb是非關(guān)系型數(shù)據(jù)庫(kù)
4.MySQL可以支持事務(wù),外鍵等,而mongodb不支持
mysql中的概念MongoDB中的概念解釋tablecollention表/集合rowdocument行/文檔columnfield字段indexindex索引primary keyprimary key主鍵,mongo中每個(gè)documentdou默認(rèn)有_id字段為主鍵
一.java鏈接mongodb
1.導(dǎo)入mongodb驅(qū)動(dòng)包
2.創(chuàng)建鏈接對(duì)象
MongoClient mongoclient=new MongoClient("127.0.0.1",27017);
3.釋放資源
mongoclient.close();
二.查看數(shù)據(jù)庫(kù)的所有庫(kù)和集合
1.查看所有庫(kù)名
//獲取鏈接對(duì)象,參數(shù)1為url,參數(shù)2為端口號(hào) MongoClient mongoclient=new MongoClient("127.0.0.1",27017); //獲取所有庫(kù)名的迭代器 MongoIterable<String> list= mongoclient.listDatebaseNames(); for(String str:list){ System.out.println(str);//查看所有庫(kù)名 }
2.查看所有集合名
//獲取鏈接對(duì)象,參數(shù)1為url,參數(shù)2為端口號(hào) MongoClient mongoclient=new MongoClient("127.0.0.1",27017); //獲取庫(kù)對(duì)象,參數(shù)為庫(kù)名 MongoDatabase db=mongoclient.getDatabase("school"); //獲取當(dāng)前庫(kù)對(duì)象的所有集合名的迭代器 MongoIterable<String> list=db.getlistCollectionNames(); for(String str:list){ System.out.println(str);//獲取所有集合名 } //獲取集合對(duì)象,參數(shù)為集合名 MongoCollention<Document> collection=db.getCollection("student");
三.對(duì)數(shù)據(jù)庫(kù)進(jìn)行增刪改查
1.新增數(shù)據(jù)
//獲取集合對(duì)象 MongoCollection<Document> collection = db.getCollection("student"); //新增時(shí)創(chuàng)建一個(gè)Docuement對(duì)象,以鍵值對(duì)的形式傳入內(nèi)容 Document document = new Document(); document.put("name", "張三"); document.put("age", 99); document.put("sex", "男"); //添加一條數(shù)據(jù),沒(méi)有返回值 collection.insertOne(document); //新增多條數(shù)據(jù),傳入一個(gè)document集合 collection.insertMany(null);
Filters類(過(guò)濾器)
刪除,修改,查詢時(shí)傳入的篩選條件
舉例: Bson eq=Filters.eq("name","張三");
Filters.eq() | 等值 |
Filters.gt() | 大于指定值(gte大于等于) |
Filters.lt() | 小于指定值(lte小于等于) |
Filters.ne() | 不等于指定 |
Filters.nin() | 不等于數(shù)組中的值 |
Filters.and() | 傳入多個(gè)Bson對(duì)象,and連接 |
Filters.regex() | 模糊查詢 |
Filters.exists() | 存在改字段 |
2.修改數(shù)據(jù)
//修改條件 Bson eq = Filters.eq("name","張三"); //修改匹配到的第一條 UpdateResult updateOne = collection.updateOne( eq, new Document("$set",new Document("age",50))); //修改匹配的多條 collection.updateMany(eq, null);
修改的返回值內(nèi)容
AcknowledgedUpdateResult{matchedCount=0, modifiedCount=0, upsertedId=null}
matchedCount:代表匹配到的文檔數(shù)
modifiedCount:代表被修改的文檔數(shù)
upsertedId:代表修改的文檔id(主鍵)
3.數(shù)據(jù)刪除
//條件 Bson eq = Filters.eq("name","張三"); //刪除一條符合的 DeleteResult deleteOne = collection.deleteOne(eq); //刪除 所有符合條件的 DeleteResult deleteMany = collection.deleteMany(eq);
刪除的返回值內(nèi)容
AcknowledgedDeleteResult{deletedCount=0}
deletedCount:被刪除的文檔數(shù)
4.查詢數(shù)據(jù)
//無(wú)條件全查 FindIterable<Document> find = collection.find(); //帶條件查詢 Bson eq = Filters.regex("name", "張"); FindIterable<Document> find = collection.find(eq);
查詢的結(jié)果集映射
這種解析方式我們必須知道文檔中的各個(gè)字段名
//全查 FindIterable<Document> find = collection.find(); //創(chuàng)建一個(gè)實(shí)體類集合準(zhǔn)備接收結(jié)果 List<Student> slist = new ArrayList<Student>(); //獲取結(jié)果集迭代器對(duì)象 MongoCursor<Document> iterator = find.iterator(); while(iterator.hasNext()) { Student s = new Student(); Document next = iterator.next(); s.setSname(next.getString("name")); s.setSsex(next.getString("sex")); s.setSid(next.getInteger("sid")); //將結(jié)果添加至實(shí)體類集合 slist.add(s); }
總結(jié)
到此這篇關(guān)于JAVA操作MongoDB數(shù)據(jù)庫(kù)的文章就介紹到這了,更多相關(guān)JAVA操作MongoDB數(shù)據(jù)庫(kù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java中的StringTokenizer實(shí)現(xiàn)字符串切割詳解
這篇文章主要介紹了Java中的StringTokenizer實(shí)現(xiàn)字符串切割詳解,java.util工具包提供了字符串切割的工具類StringTokenizer,Spring等常見(jiàn)框架的字符串工具類(如Spring的StringUtils),需要的朋友可以參考下2024-01-01spring實(shí)現(xiàn)bean對(duì)象創(chuàng)建代碼詳解
這篇文章主要介紹了spring實(shí)現(xiàn)bean對(duì)象創(chuàng)建代碼詳解,具有一定借鑒價(jià)值,需要的朋友可以參考下2017-12-12使用MyBatis攔截器實(shí)現(xiàn)sql查詢權(quán)限動(dòng)態(tài)修改代碼實(shí)例
這篇文章主要介紹了使用MyBatis攔截器實(shí)現(xiàn)sql查詢權(quán)限動(dòng)態(tài)修改代碼實(shí)例,為了不耦合,現(xiàn)在的方案是在需要鑒權(quán)的Mybatis?Mapper方法上增加一個(gè)注解,在運(yùn)行過(guò)程中判斷該注解存在即對(duì)sql進(jìn)行修改,需要的朋友可以參考下2023-08-08如何在MyBatis中實(shí)現(xiàn)DataSource
今天給大家整理了如何在MyBatis中實(shí)現(xiàn)DataSource,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們很有幫助,需要的朋友可以參考下2021-06-06SpringBoot中間件ORM框架實(shí)現(xiàn)案例詳解(Mybatis)
這篇文章主要介紹了SpringBoot中間件ORM框架實(shí)現(xiàn)案例詳解(Mybatis),本篇文章提煉出mybatis最經(jīng)典、最精簡(jiǎn)、最核心的代碼設(shè)計(jì),來(lái)實(shí)現(xiàn)一個(gè)mini-mybatis,從而熟悉并掌握ORM框架的涉及實(shí)現(xiàn),需要的朋友可以參考下2023-07-07Kotlin基礎(chǔ)教程之Run,標(biāo)簽Label,函數(shù)Function-Type
這篇文章主要介紹了Kotlin基礎(chǔ)教程之Run,標(biāo)簽Label,函數(shù)Function-Type的相關(guān)資料,需要的朋友可以參考下2017-05-05在SpringBoot中更改默認(rèn)端口的方法總結(jié)
在本文中,小編將帶大家學(xué)習(xí)如何在 Spring Boot 中更改默認(rèn)端口,默認(rèn)情況下,嵌入式 Web 服務(wù)器使用 8080端口來(lái)啟動(dòng) Spring 引導(dǎo)應(yīng)用程序,有幾種方法可以更改該端口,文中介紹的非常詳細(xì),需要的朋友可以參考下2023-07-07