mongodb三分鐘入門大全
一、MongoDB是什么
1、維基百科
MongoDB是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫。由C++語言編寫。旨在為WEB應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案。
MongoDB是一個(gè)介于關(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格式,因此可以存儲(chǔ)比較復(fù)雜的數(shù)據(jù)類型。Mongo最大的特點(diǎn)是它支持的查詢語言非常強(qiáng)大,其語法有點(diǎn)類似于面向?qū)ο蟮牟樵冋Z言,幾乎可以實(shí)現(xiàn)類似關(guān)系數(shù)據(jù)庫單表查詢的絕大部分功能,而且還支持對(duì)數(shù)據(jù)建立索引。
2、簡而言之
MongoDB是文檔型的NoSQL數(shù)據(jù)庫,數(shù)據(jù)以文檔(對(duì)應(yīng)關(guān)系型數(shù)據(jù)庫的記錄)的形式在MongoDB中保存,文檔實(shí)際上就是一個(gè)個(gè)JSON字符串,使用JSON的好處是非常直觀,通過一系列的Key-Value鍵值對(duì)來表示數(shù)據(jù),符合我們的閱讀習(xí)慣。
在Java、Python中對(duì)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暫時(shí)不適合需要復(fù)雜事務(wù)的場景。
靈活的文檔模型JSON格式存儲(chǔ)最接近真實(shí)對(duì)象模型,對(duì)開發(fā)者友好,方便快速開發(fā)迭代,可用復(fù)制集滿足數(shù)據(jù)高可靠、高可用的需求,運(yùn)維較為簡單、故障自動(dòng)切換可擴(kuò)展分片集群海量數(shù)據(jù)存儲(chǔ)。
2、多引擎支持各種強(qiáng)大的索引需求
- 支持地理位置索引
- 可用于構(gòu)建各種O2O應(yīng)用
- 文本索引解決搜索的需求
- TTL索引解決歷史數(shù)據(jù)過期的需求
- Gridfs解決文件存儲(chǔ)的需求
- aggregation & mapreduce解決數(shù)據(jù)分析場景需求,可以自己寫查詢語句或腳本,將請(qǐng)求分發(fā)到 MongoDB 上完成。
3、具體的應(yīng)用場景
傳統(tǒng)的關(guān)系型數(shù)據(jù)庫在解決三高問題上的力不從心。
何為三高?
- High performance - 對(duì)數(shù)據(jù)庫高并發(fā)讀寫的需求。
- Huge Storage - 對(duì)海量數(shù)據(jù)的高效率存儲(chǔ)和訪問的需求。
- High Scalability && High Availability- 對(duì)數(shù)據(jù)庫的高可擴(kuò)展性和高可用性的需求。
- MongoDB可以完美解決三高問題。
4、以下是幾個(gè)實(shí)際的應(yīng)用案例:
(1)游戲場景
使用MongoDB存儲(chǔ)游戲用戶信息、裝備、積分等,直接以內(nèi)嵌文檔的形式存儲(chǔ),方便查詢、更新。
(2)物流場景
使用MongoDB存儲(chǔ)訂單信息、訂單狀態(tài)、物流信息,訂單狀態(tài)在運(yùn)送過程中飛速迭代、以MongoDB內(nèi)嵌數(shù)組的形式來存儲(chǔ),一次查詢就能將訂單所有的變更查出來,牛逼plus。
(3)社交場景
使用MongoDB存儲(chǔ)用戶信息,朋友圈信息,通過地理位置索引實(shí)現(xiàn)附近的人、定位功能。
(4)物聯(lián)網(wǎng)場景
使用MongoDB存儲(chǔ)設(shè)備信息、設(shè)備匯報(bào)的日志信息、并對(duì)這些信息進(jìn)行多維度分析。
(5)視頻直播
使用MongoDB存儲(chǔ)用戶信息、點(diǎn)贊互動(dòng)信息。
5、選擇MongoDB的場景總結(jié):
- 數(shù)據(jù)量大
- 讀寫操作頻繁
- 數(shù)據(jù)價(jià)值較低,對(duì)事務(wù)要求不高
三、MongoDB對(duì)比MySQL
1、關(guān)鍵字對(duì)比
| 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自動(dòng)將_id字段設(shè)置為主鍵 |
四、SpringBoot整合MongoDB實(shí)現(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、啟動(dòng)類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、實(shí)體類
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;//主鍵
//該屬性對(duì)應(yīng)mongodb的字段的名字,如果一致,則無需該注解
private String name;
private Integer age;
private String phone;
private String parentid;//上級(jí)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查詢?cè)u(píng)論
*/
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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MongoDB中的主從同步配置和mongod相關(guān)啟動(dòng)命令講解
這篇文章主要介紹了MongoDB中的主從同步配置和mongod相關(guān)啟動(dòng)命令講解,文中也羅列了很多其他常用的mongod命令參數(shù),需要的朋友可以參考下2016-03-03
MongoDB學(xué)習(xí)筆記—Linux下搭建MongoDB環(huán)境
本篇文章主要介紹了Linux下搭建MongoDB環(huán)境,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-11-11
Linux服務(wù)器下MariaDB 10自動(dòng)化安裝部署
這篇文章主要介紹了Linux服務(wù)器下MariaDB 10自動(dòng)化安裝部署,需要的朋友可以參考下2016-08-08
deepin 15.3 X64系統(tǒng)中安裝mongodb的方法步驟
這篇文章主要跟大家分享了deepin 15.3 X64系統(tǒng)中安裝mongodb的方法步驟,文中將安裝步驟介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來跟著小編一起學(xué)習(xí)學(xué)習(xí)吧。2017-04-04
mongodb中隨機(jī)獲取1條記錄的實(shí)現(xiàn)方法
這篇文章運(yùn)用實(shí)例給大家演示了如何在mongodb中隨機(jī)獲取1條記錄,文中介紹的很詳細(xì),有需要的朋友們可以參考借鑒。下面來一起看看吧。2016-09-09
Laravel?框架中使用?MongoDB?數(shù)據(jù)庫的操作
這篇文章主要介紹了Laravel?框架中使用?MongoDB?數(shù)據(jù)庫的問題及操作方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03
MongoDB學(xué)習(xí)筆記之分組(group)使用示例
這篇文章主要介紹了MongoDB學(xué)習(xí)筆記之分組(group)使用示例,本文直接給出一組測試數(shù)據(jù),然后練習(xí)分組的基本使用,需要的朋友可以參考下2015-07-07

