mongodb三分鐘入門大全
一、MongoDB是什么
1、維基百科
MongoDB是一個基于分布式文件存儲的數(shù)據(jù)庫。由C++語言編寫。旨在為WEB應(yīng)用提供可擴展的高性能數(shù)據(jù)存儲解決方案。
MongoDB是一個介于關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間的產(chǎn)品,是非關(guān)系數(shù)據(jù)庫當(dāng)中功能最豐富,最像關(guān)系數(shù)據(jù)庫的。它支持的數(shù)據(jù)結(jié)構(gòu)非常松散,是類似json的bson格式,因此可以存儲比較復(fù)雜的數(shù)據(jù)類型。Mongo最大的特點是它支持的查詢語言非常強大,其語法有點類似于面向?qū)ο蟮牟樵冋Z言,幾乎可以實現(xiàn)類似關(guān)系數(shù)據(jù)庫單表查詢的絕大部分功能,而且還支持對數(shù)據(jù)建立索引。
2、簡而言之
MongoDB是文檔型的NoSQL數(shù)據(jù)庫,數(shù)據(jù)以文檔(對應(yīng)關(guān)系型數(shù)據(jù)庫的記錄)的形式在MongoDB中保存,文檔實際上就是一個個JSON字符串,使用JSON的好處是非常直觀,通過一系列的Key-Value鍵值對來表示數(shù)據(jù),符合我們的閱讀習(xí)慣。
在Java、Python中對JSON都有很好的支持,數(shù)據(jù)從MongoDB中讀取出來后,可無需轉(zhuǎn)換直接使用;支持豐富的數(shù)據(jù)結(jié)構(gòu),Value可以是普通的整型、字符串、數(shù)組、嵌套的子文檔,使用嵌套的好處是在MongoDB中僅需一次簡單的查詢就能夠獲取到你所需的數(shù)據(jù)。
二、MongoDB 的應(yīng)用場景
1、MongoDB事務(wù)
MongoDB目前只支持單文檔事務(wù),MongoDB暫時不適合需要復(fù)雜事務(wù)的場景。
靈活的文檔模型JSON格式存儲最接近真實對象模型,對開發(fā)者友好,方便快速開發(fā)迭代,可用復(fù)制集滿足數(shù)據(jù)高可靠、高可用的需求,運維較為簡單、故障自動切換可擴展分片集群海量數(shù)據(jù)存儲。
2、多引擎支持各種強大的索引需求
- 支持地理位置索引
- 可用于構(gòu)建各種O2O應(yīng)用
- 文本索引解決搜索的需求
- TTL索引解決歷史數(shù)據(jù)過期的需求
- Gridfs解決文件存儲的需求
- aggregation & mapreduce解決數(shù)據(jù)分析場景需求,可以自己寫查詢語句或腳本,將請求分發(fā)到 MongoDB 上完成。
3、具體的應(yīng)用場景
傳統(tǒng)的關(guān)系型數(shù)據(jù)庫在解決三高問題上的力不從心。
何為三高?
- High performance - 對數(shù)據(jù)庫高并發(fā)讀寫的需求。
- Huge Storage - 對海量數(shù)據(jù)的高效率存儲和訪問的需求。
- High Scalability && High Availability- 對數(shù)據(jù)庫的高可擴展性和高可用性的需求。
- MongoDB可以完美解決三高問題。
4、以下是幾個實際的應(yīng)用案例:
(1)游戲場景
使用MongoDB存儲游戲用戶信息、裝備、積分等,直接以內(nèi)嵌文檔的形式存儲,方便查詢、更新。
(2)物流場景
使用MongoDB存儲訂單信息、訂單狀態(tài)、物流信息,訂單狀態(tài)在運送過程中飛速迭代、以MongoDB內(nèi)嵌數(shù)組的形式來存儲,一次查詢就能將訂單所有的變更查出來,牛逼plus。
(3)社交場景
使用MongoDB存儲用戶信息,朋友圈信息,通過地理位置索引實現(xiàn)附近的人、定位功能。
(4)物聯(lián)網(wǎng)場景
使用MongoDB存儲設(shè)備信息、設(shè)備匯報的日志信息、并對這些信息進行多維度分析。
(5)視頻直播
使用MongoDB存儲用戶信息、點贊互動信息。
5、選擇MongoDB的場景總結(jié):
- 數(shù)據(jù)量大
- 讀寫操作頻繁
- 數(shù)據(jù)價值較低,對事務(wù)要求不高
三、MongoDB對比MySQL
1、關(guān)鍵字對比
MySQL | MongoDB | 解釋說明 |
---|---|---|
database | database | 數(shù)據(jù)庫 |
table | collection | 表/集合 |
row | document | 行/文檔 |
column | field | 字段/域 |
index | index | 索引 |
join | 嵌入文檔 | 表關(guān)聯(lián)/MongoDB不支持join,MongoDB通過嵌入式文檔來替代多表連接 |
primary key | primary key | 主鍵/MongoDB自動將_id字段設(shè)置為主鍵 |
四、SpringBoot整合MongoDB實現(xiàn)增刪改查
1、引入pom
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>MongoDBProject</artifactId> <version>1.0-SNAPSHOT</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.4.RELEASE</version> <relativePath/> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> </dependencies> </project>
2、啟動類Application
package com.guor; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; @SpringBootApplication public class Application extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(Application.class); } public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
3、實體類
package com.guor; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; @SpringBootApplication public class Application extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(Application.class); } public static void main(String[] args) { SpringApplication.run(Application.class, args); } }package com.guor.bean; import org.springframework.data.annotation.Id; import java.io.Serializable; public class User implements Serializable { @Id private String id;//主鍵 //該屬性對應(yīng)mongodb的字段的名字,如果一致,則無需該注解 private String name; private Integer age; private String phone; private String parentid;//上級ID public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getParentid() { return parentid; } public void setParentid(String parentid) { this.parentid = parentid; } @Override public String toString() { return "User{" + "id='" + id + '\'' + ", name='" + name + '\'' + ", age=" + age + ", phone='" + phone + '\'' + ", parentid='" + parentid + '\'' + '}'; } }
4、UserRepository
package com.guor.dao; import com.guor.bean.User; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.mongodb.repository.MongoRepository; public interface UserRepository extends MongoRepository<User,String> { Page<User> getPageByid(String parentId, Pageable pageable); }
5、業(yè)務(wù)層service
package com.guor.service; import com.guor.bean.User; import com.guor.dao.UserRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.stereotype.Service; import java.util.List; @Service public class UserService { @Autowired private UserRepository userRepository; public void insertUser(User user){ userRepository.save(user); } public void updateUser(User user){ userRepository.save(user); } public void deleteUserById(String id){ userRepository.deleteById(id); } public List<User> getAllUser(){ return userRepository.findAll(); } /** * 根據(jù)id查詢評論 */ public User getUserById(String id){ return userRepository.findById(id).get(); } /** * 分頁 */ public Page<User> getPageByid(String parentId, int page , int size){ return userRepository.getPageByid(parentId, PageRequest.of(page-1,size)); } }
6、測試類
package com.guor; import com.guor.bean.User; import com.guor.service.UserService; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.domain.Page; import org.springframework.test.context.junit4.SpringRunner; import java.util.List; @RunWith(SpringRunner.class) @SpringBootTest(classes = Application.class) public class MongoDBTest { @Autowired private UserService userService; @Test public void saveUser(){ User user=new User(); user.setName("比比東"); user.setAge(22); user.setPhone("1314"); userService.insertUser(user); } @Test public void getUser(){ List<User> list = userService.getAllUser(); for(User user : list){ System.out.println(user); } } @Test public void updateUser(){ User user=new User(); user.setId("61e3d9ac57b3da05fd0fffed"); user.setName("云韻"); user.setAge(29); user.setPhone("18525351592"); user.setParentid("1"); userService.updateUser(user); } @Test public void getUserPage(){ Page<User> pageResponse = userService.getPageByid("1",1, 2); System.out.println("----總記錄數(shù):"+pageResponse.getTotalElements()); System.out.println("----當(dāng)前頁數(shù)據(jù):"+pageResponse.getContent()); } @Test public void deleteUser(){ String id = "61e3daf31faa1f5b0e6849f8"; userService.deleteUserById(id); } }
7、插入
8、更新
9、查詢
到此這篇關(guān)于mongodb三分鐘入門大全的文章就介紹到這了,更多相關(guān)mongodb入門內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MongoDB中的主從同步配置和mongod相關(guān)啟動命令講解
這篇文章主要介紹了MongoDB中的主從同步配置和mongod相關(guān)啟動命令講解,文中也羅列了很多其他常用的mongod命令參數(shù),需要的朋友可以參考下2016-03-03MongoDB學(xué)習(xí)筆記—Linux下搭建MongoDB環(huán)境
本篇文章主要介紹了Linux下搭建MongoDB環(huán)境,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-11-11Linux服務(wù)器下MariaDB 10自動化安裝部署
這篇文章主要介紹了Linux服務(wù)器下MariaDB 10自動化安裝部署,需要的朋友可以參考下2016-08-08deepin 15.3 X64系統(tǒng)中安裝mongodb的方法步驟
這篇文章主要跟大家分享了deepin 15.3 X64系統(tǒng)中安裝mongodb的方法步驟,文中將安裝步驟介紹的非常詳細,對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來跟著小編一起學(xué)習(xí)學(xué)習(xí)吧。2017-04-04Laravel?框架中使用?MongoDB?數(shù)據(jù)庫的操作
這篇文章主要介紹了Laravel?框架中使用?MongoDB?數(shù)據(jù)庫的問題及操作方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-03-03MongoDB學(xué)習(xí)筆記之分組(group)使用示例
這篇文章主要介紹了MongoDB學(xué)習(xí)筆記之分組(group)使用示例,本文直接給出一組測試數(shù)據(jù),然后練習(xí)分組的基本使用,需要的朋友可以參考下2015-07-07