精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

既然有MySQL了,為什么還要有MongoDB?

數(shù)據(jù)庫(kù) MongoDB
讓我們一起,一探究竟,了解一下MongoDB的特點(diǎn)和基本用法,實(shí)現(xiàn)快速入門,豐富個(gè)人簡(jiǎn)歷,提高面試level,給自己增加一點(diǎn)談資,秒變面試小達(dá)人,BAT不是夢(mèng)。

大家好,我是哪吒,最近項(xiàng)目在使用MongoDB作為圖片和文檔的存儲(chǔ)數(shù)據(jù)庫(kù),為啥不直接存MySQL里,還要搭個(gè)MongoDB集群,麻不麻煩?

讓我們一起,一探究竟,了解一下MongoDB的特點(diǎn)和基本用法,實(shí)現(xiàn)快速入門,豐富個(gè)人簡(jiǎn)歷,提高面試level,給自己增加一點(diǎn)談資,秒變面試小達(dá)人,BAT不是夢(mèng)。

三分鐘你將學(xué)會(huì):

  1. MongoDB主要特征。
  2. MongoDB優(yōu)缺點(diǎn),揚(yáng)長(zhǎng)避短。
  3. 何時(shí)選擇MongoDB?為啥要用它?
  4. MongoDB與MySQL關(guān)鍵字對(duì)比。
  5. 下載與安裝過(guò)程中一些常見(jiàn)的坑。
  6. Java整合MongoDB,實(shí)現(xiàn)農(nóng)民工增刪改查。

一、基本概念走起?

MongoDB是一款開源、跨平臺(tái)、分布式,具有大數(shù)據(jù)處理能力的文檔存儲(chǔ)數(shù)據(jù)庫(kù)。

文檔數(shù)據(jù)庫(kù)MongoDB用于記錄文檔結(jié)構(gòu)的數(shù)據(jù),比如JSON、XML結(jié)構(gòu)的數(shù)據(jù)。

二、MongoDB的主要特征?

  1. 高性能。提供JSON、XML等可嵌入數(shù)據(jù)快速處理功能,提供文檔的索引功能,以提高查詢速度。
  2. 豐富的查詢語(yǔ)言。為數(shù)據(jù)聚合、結(jié)構(gòu)文檔、地理空間提供豐富的查詢功能。
  3. 高可用性。提供自動(dòng)故障轉(zhuǎn)移和數(shù)據(jù)冗余處理功能。
  4. 水平擴(kuò)展能力。提供基于多服務(wù)器集群的分布式數(shù)據(jù)處理能力,具體處理時(shí)分「主從」和「權(quán)衡」(基于Hash自動(dòng)推選)兩種處理模式。
  5. 支持多種存儲(chǔ)引擎。MongoDB提供多種存儲(chǔ)引擎,WiredTiger引擎、MMAPv1引擎是基于硬盤讀寫的存儲(chǔ)引擎,In-Memory引擎是基于內(nèi)存的存儲(chǔ)引擎。

三、MongoDB優(yōu)缺點(diǎn),揚(yáng)長(zhǎng)避短?

1、優(yōu)點(diǎn)

  1. Free-schema無(wú)模式文檔,適應(yīng)非結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)。
  2. 內(nèi)置GridFS,支持大容量的存儲(chǔ)。
  3. 內(nèi)置Sharding,分片簡(jiǎn)單。
  4. 弱一致性(最終一致),更能保證用戶的訪問(wèn)速度。
  5. 查詢性能優(yōu)越,對(duì)于千萬(wàn)級(jí)別的文檔對(duì)象,差不多10個(gè)G,對(duì)有索引的ID的查詢不會(huì)比MySQL慢,而對(duì)非索引字段的查詢,則是完勝M(fèi)ySQL。
  6. 聚合框架,它支持典型幾種聚合操作 , 比如,Aggregate pipelien, Map-Reduce等。
  7. 支持自動(dòng)故障恢復(fù)。

2、缺點(diǎn)

  1. 太吃內(nèi)存,快是有原因的,因?yàn)镸ongoDB把數(shù)據(jù)都放內(nèi)存里了。
  2. 不支持事務(wù)操作。
  3. 占用空間過(guò)大。
  4. 不支持聯(lián)表查詢。
  5. 只有最終一致性,言外之意,就是可能造成數(shù)據(jù)的不一致,如果想要保持強(qiáng)一致性,必須在一個(gè)服務(wù)器處理所有的讀寫操作,坑。
  6. 復(fù)雜聚合操作通過(guò)mapreduce創(chuàng)建,速度慢。
  7. Mongodb全局鎖機(jī)制也是個(gè)坑。
  8. 預(yù)分配模式會(huì)帶來(lái)的磁盤瓶頸。
  9. 刪除記錄時(shí)不會(huì)釋放空間,相當(dāng)于邏輯刪除,這個(gè)真的坑。
  10. MongoDB到現(xiàn)在為止,好像還沒(méi)有太好用的客戶端工具。

四、何時(shí)選擇MongoDB?為啥要用它??

1、MongoDB事務(wù)

MongoDB目前只支持單文檔事務(wù),MongoDB暫時(shí)不適合需要復(fù)雜事務(wù)的場(chǎng)景。 靈活的文檔模型JSON格式存儲(chǔ)最接近真實(shí)對(duì)象模型,對(duì)開發(fā)者友好,方便快速開發(fā)迭代,可用復(fù)制集滿足數(shù)據(jù)高可靠、高可用的需求,運(yùn)維較為簡(jiǎn)單、故障自動(dòng)切換可擴(kuò)展分片集群海量數(shù)據(jù)存儲(chǔ)。

2、多引擎支持各種強(qiáng)大的索引需求

  • 支持地理位置索引。
  • 可用于構(gòu)建各種O2O應(yīng)用。
  • 文本索引解決搜索的需求。
  • TTL索引解決歷史數(shù)據(jù)過(guò)期的需求。
  • Gridfs解決文件存儲(chǔ)的需求。
  • aggregation & mapreduce解決數(shù)據(jù)分析場(chǎng)景需求,可以自己寫查詢語(yǔ)句或腳本,將請(qǐng)求分發(fā)到 MongoDB 上完成。

3、具體的應(yīng)用場(chǎng)景

傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)在解決三高問(wèn)題上的力不從心。 何為三高?

  • High performance - 對(duì)數(shù)據(jù)庫(kù)高并發(fā)讀寫的需求。
  • Huge Storage - 對(duì)海量數(shù)據(jù)的高效率存儲(chǔ)和訪問(wèn)的需求。
  • High Scalability && High Availability- 對(duì)數(shù)據(jù)庫(kù)的高可擴(kuò)展性和高可用性的需求。

MongoDB可以完美解決三高問(wèn)題。

4、以下是幾個(gè)實(shí)際的應(yīng)用案例:

(1)游戲場(chǎng)景

使用MongoDB存儲(chǔ)游戲用戶信息、裝備、積分等,直接以內(nèi)嵌文檔的形式存儲(chǔ),方便查詢、更新。

(2)物流場(chǎng)景

使用MongoDB存儲(chǔ)訂單信息、訂單狀態(tài)、物流信息,訂單狀態(tài)在運(yùn)送過(guò)程中飛速迭代、以MongoDB內(nèi)嵌數(shù)組的形式來(lái)存儲(chǔ),一次查詢就能將訂單所有的變更查出來(lái),牛逼plus。

(3)社交場(chǎng)景

使用MongoDB存儲(chǔ)用戶信息,朋友圈信息,通過(guò)地理位置索引實(shí)現(xiàn)附近的人、定位功能。

(4)物聯(lián)網(wǎng)場(chǎng)景

使用MongoDB存儲(chǔ)設(shè)備信息、設(shè)備匯報(bào)的日志信息、并對(duì)這些信息進(jìn)行多維度分析。

(5)視頻直播

使用MongoDB存儲(chǔ)用戶信息、點(diǎn)贊互動(dòng)信息。

5、選擇MongoDB的場(chǎng)景總結(jié):

  • 數(shù)據(jù)量大
  • 讀寫操作頻繁
  • 數(shù)據(jù)價(jià)值較低,對(duì)事務(wù)要求不高

五、MongoDB與MySQL關(guān)鍵字對(duì)比?

1、關(guān)鍵字對(duì)比

MySQL

MongoDB

解釋說(shuō)明

database

database

數(shù)據(jù)庫(kù)

table

collection

表/集合

row

document

行/文檔

column

field

字段/域

index

index

索引

join

嵌入文檔

表關(guān)聯(lián)/MongoDB不支持join,MongoDB通過(guò)嵌入式文檔來(lái)替代多表連接

primary key

primary key

主鍵/MongoDB自動(dòng)將_id字段設(shè)置為主鍵

2、集合相當(dāng)于MySQL中的表

集合就是一組文檔。可以看作是具有動(dòng)態(tài)模式的表。

集合具有動(dòng)態(tài)模式的特性。這意味著一個(gè)集合中的文檔可以具有任意數(shù)量的不同形態(tài)。

但是,將不同類型的文檔存放在一個(gè)集合中會(huì)出現(xiàn)很多問(wèn)題:

  1. 文檔中可以存放任意類型的變量,但是,這里不建議將不同類型的文檔保存在同一個(gè)集合中,開發(fā)人員需要確保每個(gè)查詢只返回特定模式的文檔,或者確保執(zhí)行查詢的應(yīng)用程序代碼可以處理不同類型的文檔。
  2. 獲取集合列表比提取集合中的文檔類型列表要快得多,減少磁盤查找次數(shù)。
  3. 相同類型的文檔存放在同一個(gè)集合中可以實(shí)現(xiàn)數(shù)據(jù)的局部性,對(duì)于集合,讓使用者見(jiàn)文知意。
  4. 集合中只存放單一類型的文檔,可以更高效地對(duì)集合進(jìn)行索引。

3、集合的命名

  1. 集合名稱中不能是空字符串。
  2. 集合名稱不能包含\0(空字符),因?yàn)檫@個(gè)字符用于表示一個(gè)集合名稱的結(jié)束。
  3. 集合名稱不能以system.開頭,該前綴是為內(nèi)部集合保留的。
  4. 集合名稱不能有$,只能在某些特定情況下使用。通常情況下,可以認(rèn)為這兩個(gè)字符是MongoDB的保留字符,如果使用不當(dāng),那么驅(qū)動(dòng)程序?qū)o(wú)法正常工作。

4、文檔相當(dāng)于MySQL中的行

文檔是MongoDB中的基本數(shù)據(jù)單元,相當(dāng)于傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)中的行,它是一組有序鍵值的集合。每個(gè)文檔都有一個(gè)特殊的鍵“_id”,其在所屬的集合中是唯一的。

文檔中的鍵是字符串類型。

鍵中不能含有\(zhòng)0(空字符)。這個(gè)字符用于表示一個(gè)鍵的結(jié)束。 .和$是特殊字符,只能在某些特定情況下使用。通常情況下,可以認(rèn)為這兩個(gè)字符是MongoDB的保留字符,如果使用不當(dāng),那么驅(qū)動(dòng)程序?qū)o(wú)法正常工作。

5、游標(biāo)

數(shù)據(jù)庫(kù)會(huì)使用游標(biāo)返回find的執(zhí)行結(jié)果。游標(biāo)的客戶端實(shí)現(xiàn)通常能夠在很大程度上對(duì)查詢的最終輸出進(jìn)行控制。你可以限制結(jié)果的數(shù)量,跳過(guò)一些結(jié)果,按任意方向的任意鍵組合對(duì)結(jié)果進(jìn)行排序,以及執(zhí)行許多其他功能強(qiáng)大的操作。

通過(guò)cursor.hasNext()檢查是否還有其它結(jié)果,通過(guò)cursor.next()用來(lái)對(duì)其進(jìn)行獲取。

調(diào)用find()時(shí),shell并不會(huì)立即查詢數(shù)據(jù)庫(kù),而是等到真正開始請(qǐng)求結(jié)果時(shí)才發(fā)送查詢,這樣可以在執(zhí)行之前給查詢附加額外的選項(xiàng)。cursor對(duì)象的大多數(shù)方法會(huì)返回游標(biāo)本身,這樣就可以按照任意順序?qū)⑦x項(xiàng)鏈接起來(lái)了。

在使用db.users.find();查詢時(shí),實(shí)際上查詢并沒(méi)有真正執(zhí)行,只是在構(gòu)造查詢,執(zhí)行cursor.hasNext(),查詢才會(huì)發(fā)往服務(wù)器端。shell會(huì)立刻獲取前100個(gè)結(jié)果或者前4MB的數(shù)據(jù)(兩者之中的較小者),這樣下次調(diào)用next或者h(yuǎn)asNext時(shí)就不必再次連接服務(wù)器去獲取結(jié)果了。在客戶端遍歷完第一組結(jié)果后,shell會(huì)再次連接數(shù)據(jù)庫(kù),使用getMore請(qǐng)求更多的結(jié)果。getMore請(qǐng)求包含一個(gè)游標(biāo)的標(biāo)識(shí)符,它會(huì)向數(shù)據(jù)庫(kù)詢問(wèn)是否還有更多的結(jié)果,如果有則返回下一批結(jié)果。這個(gè)過(guò)程會(huì)一直持續(xù),直到游標(biāo)耗盡或者結(jié)果被全部返回。

6、游標(biāo)的生命周期

在服務(wù)器端,游標(biāo)會(huì)占用內(nèi)存和資源。一旦游標(biāo)遍歷完結(jié)果之后,或者客戶端發(fā)送一條消息要求終止,數(shù)據(jù)庫(kù)就可以釋放它正在使用的資源。

何時(shí)銷毀游標(biāo):

  1. 當(dāng)游標(biāo)遍歷完匹配的結(jié)果時(shí),它會(huì)消除自身。
  2. 當(dāng)游標(biāo)超出客戶端的作用域時(shí),驅(qū)動(dòng)程序會(huì)向數(shù)據(jù)庫(kù)發(fā)送一條特殊的消息,讓數(shù)據(jù)庫(kù)終止該游標(biāo)。
  3. 如果10分鐘沒(méi)有被使用的話,數(shù)據(jù)庫(kù)游標(biāo)也將自動(dòng)銷毀。

六、下載與安裝過(guò)程中一些常見(jiàn)的坑?

1、下載地址:https://www.mongodb.com/try/download/community2。

2、配置環(huán)境變量D:\Program Files\MongoDB\Server\5.0\bin。

3、在bin目錄下,重新打開一個(gè)窗口,D:\Program Files\MongoDB\Server\5.0\bin,打開cmd,輸入MongoDB。

圖片

4、如果msi方式失敗,可以下載zip文件進(jìn)行安裝。

下載zip文件,解壓,在bin同級(jí)目錄下建data文件夾,在data下建一個(gè)db文件夾,存儲(chǔ)MongoDB數(shù)據(jù)。

在bin文件夾下執(zhí)行cmd,執(zhí)行mongod --dbpath D:\Program Files\mongodb\data\db命令。

再在data目錄下,建一個(gè)logs文件夾,存放MongoDB日志。

在mongodb/bin目錄下,建一個(gè)mongod.cfg文件,寫入。

systemLog:
destination: file
logAppend: true
path: D:\Program Files\mongodb\data\logs\mongod.log
storage:
dbPath: D:\Program Files\mongodb\data\db

執(zhí)行mongod --config "D:\Program Files\mongodb\bin\mongod.cfg" --install 命令,安裝MongoDB。

通過(guò)mongod --version檢查MongoDB版本。

D:\Program Files\mongodb\bin>mongod --version
db version v5.0.14
Build Info: {
"version": "5.0.14",
"gitVersion": "1b3b0073a0b436a8a502b612f24fb2bd572772e5",
"modules": [],
"allocator": "tcmalloc",
"environment": {
"distmod": "windows",
"distarch": "x86_64",
"target_arch": "x86_64"
}
}

5、mongodb由于目標(biāo)計(jì)算機(jī)積極拒絕,無(wú)法連接。

突然間,mongodb無(wú)法連接了?mongod.exe --dbpath "D:\Program Files\mongodb\data完美解決。

注意一點(diǎn),在重新啟動(dòng)時(shí),執(zhí)行mongod.exe --dbpath "D:\Program Files\mongodb\data的窗口不要關(guān)閉。

圖片

6、由于找不到vcruntime140_1.dll,無(wú)法繼續(xù)執(zhí)行代碼。

圖片

1、下載vcruntime140_1.dll文件

2、將vcruntime140_1.dll文件拷貝到C:\Windows\System32即可

圖片

七、Java整合MongoDB,實(shí)現(xiàn)農(nóng)民工增刪改查?

1、加入POM

<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.8.2</version>
</dependency>

2、MongoDBUtil工具類

package com.example.demo.utils;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.bson.Document;
import org.bson.conversions.Bson;

import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Filters;

public class MongoDBUtil {

private static MongoClient mongoClient;

private static MongoClient mongoClientIdentify;

/**
* 不通過(guò)認(rèn)證獲取連接數(shù)據(jù)庫(kù)對(duì)象
*/
public static MongoDatabase getNoIdentifyConnect(String host, int port, String dbaseName){
// 連接mongodb服務(wù)
MongoDBUtil.mongoClient = new MongoClient(host, port);

// 連接數(shù)據(jù)庫(kù)
MongoDatabase mongoDatabase = MongoDBUtil.mongoClient.getDatabase(dbaseName);

// 返回連接數(shù)據(jù)庫(kù)對(duì)象
return mongoDatabase;
}

/**
* 通過(guò)連接認(rèn)證獲取MongoDB連接
*/
public static MongoDatabase getIdentifyConnect(String host, int port, String dbaseName, String userName, String password){

List<ServerAddress> adds = new ArrayList<ServerAddress>();

ServerAddress serverAddress = new ServerAddress(host, port);
adds.add(serverAddress);

List<MongoCredential> credentials = new ArrayList<>();

MongoCredential mongoCredential = MongoCredential.createScramSha1Credential(userName, dbaseName, password.toCharArray());
credentials.add(mongoCredential);

// 通過(guò)連接認(rèn)證獲取MongoDB連接
MongoDBUtil.mongoClientIdentify = new MongoClient(adds, credentials);

MongoDatabase mongoDatabase = MongoDBUtil.mongoClientIdentify.getDatabase(dbaseName);

return mongoDatabase;
}

/**
* 關(guān)閉連接
*/
public static void closeNoIdentifyConnect (){
MongoDBUtil.mongoClient.close();
}

/**
* 關(guān)閉連接
*/
public static void closeIdentifyConnect (){
MongoDBUtil.mongoClientIdentify.close();
}

/**
* 插入一個(gè)文檔
*/
public static void insertOne (Map<String, Object> data, MongoDatabase mongoDatabase, String col){
//獲取集合
MongoCollection<Document> collection = mongoDatabase.getCollection(col);

//創(chuàng)建文檔
Document document = new Document();

for (Map.Entry<String, Object> m : data.entrySet()) {
document.append(m.getKey(), m.getValue()).append(m.getKey(), m.getValue());
}

//插入一個(gè)文檔
collection.insertOne(document);
}

/**
* 插入多個(gè)文檔
*/
public static void insertMany (List<Map<String, Object>> listData, MongoDatabase mongoDatabase, String col){
//獲取集合
MongoCollection<Document> collection = mongoDatabase.getCollection(col);

//要插入的數(shù)據(jù)
List<Document> list = new ArrayList<>();
for (Map<String, Object> data : listData) {
//創(chuàng)建文檔
Document document = new Document();

for (Map.Entry<String, Object> m : data.entrySet()) {
document.append(m.getKey(), m.getValue());
}
list.add(document);
}

//插入多個(gè)文檔
collection.insertMany(list);
}

/**
* 刪除匹配到的第一個(gè)文檔
*/
public static void delectOne (String col, String key, Object value, MongoDatabase mongoDatabase){
//獲取集合
MongoCollection<Document> collection = mongoDatabase.getCollection(col);
//申明刪除條件
Bson filter = Filters.eq(key, value);
//刪除與篩選器匹配的單個(gè)文檔
collection.deleteOne(filter);
}

/**
* 刪除匹配的所有文檔
*/
public static void deleteMany (String col, String key, Object value, MongoDatabase mongoDatabase){
//獲取集合
MongoCollection<Document> collection = mongoDatabase.getCollection(col);
//申明刪除條件
Bson filter = Filters.eq(key, value);
//刪除與篩選器匹配的所有文檔
collection.deleteMany(filter);
}

/**
* 刪除集合中所有文檔
*/
public static void deleteAllDocument(String col, MongoDatabase mongoDatabase){
//獲取集合
MongoCollection<Document> collection = mongoDatabase.getCollection(col);
collection.deleteMany(new Document());
}

/**
* 刪除文檔和集合。
*/
public static void deleteAllCollection(String col, MongoDatabase mongoDatabase){
//獲取集合
MongoCollection<Document> collection = mongoDatabase.getCollection(col);
collection.drop();
}

/**
* 修改單個(gè)文檔,修改過(guò)濾器篩選出的第一個(gè)文檔
*
* @param col 修改的集合
* @param key 修改條件的鍵
* @param value 修改條件的值
* @param eqKey 要修改的鍵,如果eqKey不存在,則新增記錄
* @param eqValue 要修改的值
* @param mongoDatabase 連接數(shù)據(jù)庫(kù)對(duì)象
*/
public static void updateOne (String col, String key, Object value,String eqKey, Object eqValue, MongoDatabase mongoDatabase){
//獲取集合
MongoCollection<Document> collection = mongoDatabase.getCollection(col);
//修改過(guò)濾器
Bson filter = Filters.eq(key, value);
//指定修改的更新文檔
Document document = new Document("$set", new Document(eqKey, eqValue));
//修改單個(gè)文檔
collection.updateOne(filter, document);
}

/**
* 修改多個(gè)文檔
*
* @param col 修改的集合
* @param key 修改條件的鍵
* @param value 修改條件的值
* @param eqKey 要修改的鍵,如果eqKey不存在,則新增記錄
* @param eqValue 要修改的值
* @param mongoDatabase 連接數(shù)據(jù)庫(kù)對(duì)象
*/
public static void updateMany (String col, String key, Object value, String eqKey, Object eqValue, MongoDatabase mongoDatabase){
//獲取集合
MongoCollection<Document> collection = mongoDatabase.getCollection(col);
//修改過(guò)濾器
Bson filter = Filters.eq(key, value);
//指定修改的更新文檔
Document document = new Document("$set", new Document(eqKey, eqValue));
//修改多個(gè)文檔
collection.updateMany(filter, document);
}

/**
* 查找集合中的所有文檔
*/
public static MongoCursor<Document> find (String col, MongoDatabase mongoDatabase){
//獲取集合
MongoCollection<Document> collection = mongoDatabase.getCollection(col);
//查找集合中的所有文檔
FindIterable<Document> findIterable = collection.find();
MongoCursor<Document> cursorIterator = findIterable.iterator();
return cursorIterator;
}

/**
* 按條件查找集合中文檔
*/
public static MongoCursor<Document> Filterfind (String col,String key, Object value, MongoDatabase mongoDatabase){
//獲取集合
MongoCollection<Document> collection = mongoDatabase.getCollection(col);
//指定查詢過(guò)濾器
Bson filter = Filters.eq(key, value);

//指定查詢過(guò)濾器查詢
FindIterable<Document> findIterable = collection.find(filter);
MongoCursor<Document> cursorIterator = findIterable.iterator();
return cursorIterator;
}
}

3、測(cè)試類

<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
package com.example.demo.utils;

import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;
import org.junit.Test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MongoDBTest {

// 獲取數(shù)據(jù)庫(kù)連接對(duì)象
MongoDatabase mongoDatabase = MongoDBUtil.getNoIdentifyConnect("127.0.0.1", 27017, "test");

@Test
public void insertOne(){
Map<String, Object> map = new HashMap<String, Object>();
map.put("姓名", "哪吒編程");
map.put("性別", "男");
map.put("年齡", 18);
MongoDBUtil.insertOne(map, mongoDatabase, "worker");
MongoDBUtil.closeNoIdentifyConnect();
}

@Test
public void insertMany(){
Map<String, Object> map1 = new HashMap<String, Object>();
map1.put("姓名", "哪吒編程2");
map1.put("性別", "男");
map1.put("年齡", 18);
Map<String, Object> map2 = new HashMap<String, Object>();
map2.put("姓名", "妲己");
map2.put("性別", "女");
map2.put("年齡", 18);
List<Map<String, Object>> listData = new ArrayList<>();
listData.add(map1);
listData.add(map2);
MongoDBUtil.insertMany(listData, mongoDatabase, "worker");
MongoDBUtil.closeNoIdentifyConnect();
}

@Test
public void delectOne(){
MongoDBUtil.delectOne("worker", "姓名", "妲己", mongoDatabase);

MongoDBUtil.closeNoIdentifyConnect();
}

@Test
public void deleteMany(){

MongoDBUtil.deleteMany("worker", "姓名", "哪吒編程", mongoDatabase);
MongoDBUtil.deleteMany("worker", "姓名", "妲己", mongoDatabase);

MongoDBUtil.closeNoIdentifyConnect();
}

@Test
public void deleteAllDocument(){
MongoDBUtil.deleteAllDocument("worker", mongoDatabase);

MongoDBUtil.closeNoIdentifyConnect();
}

@Test
public void deleteAllCollection(){

MongoDBUtil.deleteAllCollection("worker", mongoDatabase);

MongoDBUtil.closeNoIdentifyConnect();
}

@Test
public void updateOne(){

MongoDBUtil.updateOne("worker", "姓名", "哪吒編程2","姓名", "哪吒編程", mongoDatabase);

MongoDBUtil.closeNoIdentifyConnect();
}

@Test
public void updateMany(){

MongoDBUtil.updateMany("worker", "姓名", "哪吒編程2","姓名", "哪吒編程", mongoDatabase);

MongoDBUtil.closeNoIdentifyConnect();
}

@Test
public void find(){
MongoCursor<Document> mongoCursor = MongoDBUtil.find("worker", mongoDatabase);

while (mongoCursor.hasNext()) {
Document document = mongoCursor.next();
System.out.println(document + " size: " + document.size());
}
MongoDBUtil.closeNoIdentifyConnect();
}

@Test
public void filterfind(){
MongoCursor<Document> mongoCursor = MongoDBUtil.Filterfind("worker", "姓名", "哪吒編程", mongoDatabase);

while (mongoCursor.hasNext()) {
Document document = mongoCursor.next();
System.out.println(document + " size: " + document.size());
}
MongoDBUtil.closeNoIdentifyConnect();
}
}

本文轉(zhuǎn)載自微信公眾號(hào)「哪吒編程」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系哪吒編程公眾號(hào)。

責(zé)任編輯:姜華 來(lái)源: 哪吒編程
相關(guān)推薦

2022-07-19 08:01:32

HTTP協(xié)議RPC

2023-09-07 08:07:56

goHTTP網(wǎng)絡(luò)

2019-08-05 14:23:43

DockerKubernetes容器

2024-07-11 10:41:07

HTTPSHTTP文本傳輸協(xié)議

2022-07-12 08:56:18

公平鎖非公平鎖Java

2022-10-08 00:00:00

websocket協(xié)議HTTP

2022-06-07 08:39:35

RPCHTTP

2020-11-25 09:36:17

HTTPRPC遠(yuǎn)程

2023-12-11 12:03:14

Python工具元組

2024-04-16 08:26:18

IP地址MAC地址

2021-12-20 10:30:33

forforEach前端

2022-09-13 08:44:02

IP網(wǎng)絡(luò)MAC地址

2025-11-10 03:00:00

2020-11-30 15:40:40

技術(shù)資訊

2018-12-21 11:26:49

MySQLMongoDB數(shù)據(jù)庫(kù)

2021-01-20 08:36:15

工具AtomicRefer JDK

2018-03-13 11:44:55

金融云銀行上云

2020-06-10 09:06:48

MongoDB架構(gòu)高可用

2015-09-01 09:28:55

calayeruiview區(qū)別

2019-11-20 10:39:35

iPhone緩存清理
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

国产片侵犯亲女视频播放| 国产aaa精品| 欧美国产日韩另类| 色呦呦网站在线观看| 粉嫩av一区二区三区粉嫩| 欧美激情videos| 国产精品三级在线观看无码| 国产69精品久久久久按摩| 亚洲桃色在线一区| 亚洲综合日韩中文字幕v在线| 久久久久噜噜噜亚洲熟女综合| 久久精品福利| 欧美日韩国产精品成人| 黄色一级片黄色| 欧美日韩国产综合视频 | 99视频精品免费| 免费黄色在线| 91女厕偷拍女厕偷拍高清| 国产欧美一区二区三区久久| 久久国产在线观看| av中文一区| 精品少妇一区二区三区| 成人亚洲视频在线观看| 蜜臀av国内免费精品久久久夜夜| 久久蜜臀中文字幕| 国产精品v欧美精品v日韩| 国产真人无遮挡作爱免费视频| 亚洲精品久久久| 亚洲日韩第一页| 欧美激情一区二区三区p站| 丁香婷婷久久| 欧美视频在线免费| 黄网站色视频免费观看| 日本高清视频在线观看| 久久亚洲精品小早川怜子| 97久久精品午夜一区二区| 亚洲中文无码av在线| 一本久久知道综合久久| 成人444kkkk在线观看| 国产18无套直看片| 亚洲人成网www| 亚洲大胆人体视频| 免费黄视频在线观看| 欧美黄页在线免费观看| 91国产视频在线观看| 波多野结衣乳巨码无在线| 欧美性受ⅹ╳╳╳黑人a性爽| 中文字幕一区二区三区不卡在线| 女人一区二区三区| 性xxxxbbbb| gogogo免费视频观看亚洲一| αv一区二区三区| 国产毛片一区二区三区va在线 | 97久久国产精品| 欧美爱爱小视频| 影视亚洲一区二区三区| 久久久www成人免费精品| 成人免费视频入口| 第一会所sis001亚洲| 亚洲午夜未删减在线观看 | 久久久久在线观看| 免费三片在线播放| 欧美精品啪啪| 久久99青青精品免费观看| 国产大学生自拍| 欧美成熟视频| 欧美激情在线视频二区| 日产电影一区二区三区| 日韩视频不卡| 欧洲成人在线视频| 男人天堂视频在线| 免费观看在线综合| 91精品视频观看| 精品人妻一区二区三区麻豆91| 国产美女视频91| 91丝袜脚交足在线播放| 你懂的网站在线| 91网址在线看| 日韩欧美视频一区二区| 色欧美激情视频在线| 亚洲美女屁股眼交3| 男人添女人荫蒂免费视频| 阿v视频在线观看| 色婷婷激情久久| 欧美日韩怡红院| 精品国产乱码一区二区三区| 精品动漫一区二区三区在线观看| 日本一级片在线播放| 国产探花在线精品一区二区| 日韩在线免费高清视频| a级片在线观看免费| 亚洲激精日韩激精欧美精品| 国产97色在线| 国产精品久久影视| www.爱久久.com| 欧洲精品一区色| 美女写真理伦片在线看| 午夜婷婷国产麻豆精品| 精品久久久久久久无码| 亚洲五码在线| 国产亚洲免费的视频看| 免费又黄又爽又色的视频| 欧美亚洲免费| 91超碰在线免费观看| 猫咪在线永久网站| 亚洲主播在线播放| 高清一区在线观看| 狼人天天伊人久久| 久久天天躁夜夜躁狠狠躁2022| 日本中文字幕在线免费观看| 看片的网站亚洲| 久久99精品久久久久久三级| 国产在线看片| 日本久久电影网| 熟女人妻一区二区三区免费看| 欧美码中文字幕在线| 久久久久久成人精品| 夜夜嗨aⅴ一区二区三区| 97久久超碰国产精品| 精品91一区二区三区| 成人看片网站| 精品一区电影国产| 国产在线观看99| 韩国毛片一区二区三区| 久久伦理网站| 小早川怜子一区二区三区| 天堂网一区二区三区| 久久国产精品99久久久久久老狼| 国产精品一 二 三| 爱久久·www| 一区二区三区免费在线观看| 欧美丰满熟妇xxxxx| 成人直播在线观看| 欧美精品午夜视频| 中文字幕观看视频| 91色婷婷久久久久合中文| 青少年xxxxx性开放hg| 欧美天堂视频| 精品国内二区三区| 久草网在线观看| 久久国内精品视频| 欧美一区二区三区在线免费观看 | 国产综合成人久久大片91| 精品无码久久久久国产| 午夜dj在线观看高清视频完整版 | 自拍偷拍色综合| 久久久久久久久久看片| 波多野结衣之无限发射| 日本一区二区三区视频在线看| 中文字幕九色91在线| 天堂а√在线中文在线新版| 成人综合在线观看| 国产精品视频网站在线观看| 99亚洲男女激情在线观看| 亚洲视频在线观看| 久久精品无码av| 精品国产www| 美女网站色91| 精品国产福利| 国模私拍一区二区国模曼安| 欧美成人性战久久| 成熟的女同志hd| 狠狠v欧美v日韩v亚洲ⅴ| 午夜精品美女久久久久av福利| 毛片无码国产| 中文字幕视频一区二区在线有码 | 999在线免费视频| 杨幂一区二区三区免费看视频| 欧美理论电影在线观看| 亚洲精品无遮挡| 夜夜嗨av一区二区三区| 亚洲区 欧美区| 午夜精品999| www.久久艹| 国产精品电影| 国产一级揄自揄精品视频| 国产亚洲欧美日韩高清| 国产亚洲一区二区三区| 邪恶网站在线观看| 婷婷综合久久| 99国产高清| 美女视频在线免费| 亚洲欧洲第一视频| 在线免费观看高清视频| 中文字幕日韩av资源站| 中文字幕第三区| 黑丝一区二区| 日本一区二区三区www| 国产原创一区| 久久亚洲国产精品成人av秋霞| 国产a级免费视频| 亚洲电影一区二区| www在线观看免费视频| 国产乱码一区二区三区| 国产日韩欧美精品在线观看| 香蕉一区二区| 国产欧美日韩免费| 色女人在线视频| 日韩禁在线播放| 国产又黄又大又粗的视频| 亚洲一区免费视频| 亚洲第一成人网站| 久国产精品韩国三级视频| 韩国无码av片在线观看网站| 激情综合婷婷| 国产999精品久久久影片官网| 国产伦精品一区三区精东| 欧美色图天堂| 亚洲欧洲午夜一线一品| 一级片一区二区三区| 一区二区在线观看视频| 国产成人av一区二区三区不卡| 久久99深爱久久99精品| 欧美亚洲黄色片| 国产欧美日韩精品一区二区三区| 成人日韩在线电影| av丝袜在线| 超碰97人人做人人爱少妇| 青青草免费在线视频| 3atv一区二区三区| 日日摸天天添天天添破| 亚洲色图清纯唯美| 中文字幕免费在线看线人动作大片| 国产高清久久久久| 亚洲天堂av线| 影音先锋中文字幕一区| 亚洲在线色站| 美女福利一区| 国产不卡一区二区三区在线观看| 欧美成人精品三级网站| 国自在线精品视频| 精品欧美色视频网站在线观看| 亚洲国产精品国自产拍av秋霞| 波多野结衣二区三区| 亚洲综合偷拍欧美一区色| www.黄色在线| av激情综合网| 伦伦影院午夜理论片| 亚洲欧美网站| 91九色在线观看视频| 欧美女人交a| 中文字幕乱码一区二区三区| 免费看av成人| 精品午夜一区二区三区| 国产精品45p| 96久久精品| 99精品视频在线免费播放| 日韩av电影免费观看高清| 久草在线新免费首页资源站| 日韩中文综合网| 成av人电影在线观看| 亚洲女成人图区| 日韩一级片免费观看| 日韩欧美精品在线视频| 亚洲AV无码国产精品午夜字幕| 欧美日本韩国一区| 这里只有久久精品视频| 狠狠躁18三区二区一区| 亚洲视频免费播放| 亚洲免费在线观看| 欧美三根一起进三p| 亚洲女性喷水在线观看一区| 99成人在线观看| 国产精品久久久久久久蜜臀| a级在线免费观看| 中文在线免费一区三区高中清不卡| 国产成人av一区二区三区不卡| 久久影音资源网| 精品无码一区二区三区| 成人高清av在线| 女~淫辱の触手3d动漫| 久久色在线观看| 四虎影成人精品a片| 国产网红主播福利一区二区| 国产伦理片在线观看| 中文字幕一区在线观看视频| 日本女人性生活视频| 亚洲视频狠狠干| 日本老熟俱乐部h0930| 中文字幕欧美激情一区| 国产又黄又爽又无遮挡| 亚洲一区二区三区激情| 日韩三级免费看| 一本色道亚洲精品aⅴ| 黄色一级视频免费看| 91麻豆精品国产综合久久久久久| 99在线精品视频免费观看20| 欧美本精品男人aⅴ天堂| 天堂av2024| 亚洲欧美国产精品专区久久| 精品国产白色丝袜高跟鞋| 欧美高清电影在线看| 蜜桃视频在线观看播放| 国产精品久久视频| 粉嫩av国产一区二区三区| 国产精品美女久久久久av福利| 都市激情亚洲| 日韩免费电影一区二区三区| 99久久婷婷国产综合精品电影√| 欧美成人三级在线视频| 石原莉奈在线亚洲三区| 国产人妻精品久久久久野外| 白白色 亚洲乱淫| 色欲狠狠躁天天躁无码中文字幕| 亚洲综合精品自拍| 免费黄色片视频| 日韩亚洲国产中文字幕欧美| av女名字大全列表| 欧美成人精品激情在线观看 | 日本黄网站色大片免费观看| 亚洲视频大全| 中文字幕 日韩 欧美| 国产91精品精华液一区二区三区 | 91视视频在线直接观看在线看网页在线看 | 中出视频在线观看| 国产精品久久久久影院色老大| 91插插插插插插| 日本精品一级二级| 亚洲精品无amm毛片| 中文字幕9999| a毛片不卡免费看片| 成人欧美在线观看| 亚洲日产av中文字幕| 小泽玛利亚av在线| 视频一区二区欧美| 亚洲女人在线观看| 日本一区二区不卡视频| 日本系列第一页| 91麻豆精品国产91久久久使用方法 | 久久久久久美女| 青青在线精品| 欧美综合激情| 在线播放精品| 中文字幕55页| 国产午夜精品一区二区| 欧美特黄aaaaaa| 日韩欧美电影一区| 婷婷激情在线| 国产999在线观看| 亚洲精品国产精品粉嫩| 成人av在线不卡| 久久www免费人成看片高清| 国产女主播喷水高潮网红在线| 亚洲人xxxx| 国产乱人乱偷精品视频| 在线观看欧美日韩国产| 成人免费网站视频| 国偷自产av一区二区三区小尤奈| 今天的高清视频免费播放成人| 亚洲天堂av一区二区三区| 日本一区二区成人| 国产女主播喷水视频在线观看| 精品处破学生在线二十三| 久久不射影院| av一区二区三区四区电影| 亚洲激情中文在线| 国产高清av片| 亚洲在线免费播放| 亚洲第一成人av| 欧美成人精品影院| 韩国一区二区三区视频| 日本一区午夜艳熟免费| 成人少妇影院yyyy| 久久精品性爱视频| 亚洲第一网站免费视频| 欧产日产国产精品视频| 美乳视频一区二区| 香蕉久久国产| 成都免费高清电影| 欧美日本视频在线| 国产精品剧情一区二区在线观看| 成人免费大片黄在线播放| 欧美激情电影| 日本中文字幕观看| 亚洲三级视频在线观看| av天堂一区二区三区| 欧美激情在线观看| 亚洲人成精品久久久| 99免费视频观看| 国产精品人人做人人爽人人添 | 欧美亚洲一区二区在线| 日本中文字幕在线播放| 亚洲a级在线观看| 欧美国产综合| 国产极品一区二区| 精品国产精品自拍| 国产一区精品| 1卡2卡3卡精品视频| 亚洲精品资源| 四虎国产精品成人免费入口| 欧美日韩国产在线观看| 成人性生交大片免费看在线播放| 国产在线观看一区| 日韩av电影天堂| 日韩一级片大全| 亚洲免费精彩视频| 97精品资源在线观看| 丝袜人妻一区二区三区| 久久久夜色精品亚洲| 精品久久人妻av中文字幕|