MongoDB快速入門

来源:https://www.cnblogs.com/SimpleWu/archive/2018/11/23/10008553.html
-Advertisement-
Play Games

MongoDB快速入門 Author:SimpleWu MongoDB官方網:https://www.mongodb.com/ MongoDB中文網:http://www.mongodb.org.cn/ 什麼是MongoDB? NoSQL(NoSQL = Not Only SQL ),意即"不僅僅是 ...


MongoDB快速入門

Author:SimpleWu

MongoDB官方網:https://www.mongodb.com/

MongoDB中文網:http://www.mongodb.org.cn/

什麼是MongoDB?

NoSQL(NoSQL = Not Only SQL ),意即"不僅僅是SQL"。

NoSQL,指的是非關係型的資料庫。NoSQL有時也稱作Not Only SQL的縮寫,是對不同於傳統的關係型資料庫的資料庫管理系統的統稱。

NoSQL用於超大規模數據的存儲。(例如谷歌或Facebook每天為他們的用戶收集萬億比特的數據)。這些類型的數據存儲不需要固定的模式,無需多餘操作就可以橫向擴展。

NoSQL 是一項全新的資料庫革命性運動,早期就有人提出,發展至2009年趨勢越發高漲。NoSQL的擁護者們提倡運用非關係型的數據存儲,相對於鋪天蓋地的關係型資料庫運用,這一概念無疑是一種全新的思維的註入。

而MongoDB就不僅僅是SQL。

MongoDB是一個基於分散式文件存儲的資料庫。由C++語言編寫。旨在為WEB應用提供可擴展的高性能數據存儲解決方案。

MongoDB是一個介於關係資料庫和非關係資料庫(nosql)之間的產品,是非關係資料庫當中功能最豐富,最像關係資料庫的。

MongoDB將數據存儲為一個文檔,數據結構由鍵值(key=>value)對組成。MongoDB 文檔類似於 JSON 對象。欄位值可以包含其他文檔,數組及文檔數組。

MongoDB概念
SQL術語/概念 MongoDB術語/概念 解釋/說明
database database 資料庫
table collection 資料庫表/集合
row document 數據記錄行/文檔
column field 數據欄位/域
index index 索引
table joins 表連接,MongoDB不支持
primary key primary key 主鍵,MongoDB自動將_id欄位設置為主鍵
MongoDB安裝

官方下載網站:https://www.mongodb.com/download-center/community,支持N多平臺操作系統。

我們這裡下載MongoDB的3.4,windows64位操作系統的解壓包,ZIP是綠色版,MSI是安裝版。

安裝一路next就成。

4個文件是協議不需要管,bin目錄裡面的是可執行文件,但是這個時候我們是無法使用mongodb的,我們還是要將它添加到環境變數中。

創建一個MongoDB_HOME=D:\JAVA\mongodb,然後在將%MongoDB_HOME%\bin加入到path目錄

這個時候我們運行cmd打開小黑屋運行命名:mongod,這個時候運行是失敗的:

錯誤原因是:c:data\db\這個目錄不存在,最簡單的辦法就是創建一個,不過個人不喜歡把文件放在C盤,並且以這種方式啟動會一直有個視窗感覺非常不爽。

在服務中運行:

我們首先在mongoDB安裝後的bin目錄里創建一個mongod.cfg,裡面添加如下內容

systemLog:
    destination: file
    path: D:\JAVA\mongodb\log\mongodb.log #如果沒有目錄必須要創建
storage:
    dbPath: D:\JAVA\mongodb\db\ #如果沒有目錄必須要創建

使用mongod --config "D:\JAVA\mongodb\bin\mongod.cfg" –install --serviceName "MongoDB" 安裝服務,需要管理員許可權。

芒果DB服務命令:

net start MongoDB   #啟動服務
net stop MongoDB   #關閉服務
mongod –remove     #移除服務(需要管理員許可權。)
sc delete MongoDB   刪除服務

我們使用命令之後這個時候我們的服務中會有個MongoDB服務並且在運行中。

這個時候我們就可以使用命令mongo連接上我們的資料庫。

附上一張mongoDB參數列表圖:

使用MongoDB的時候如果不喜歡黑視窗的可以去度娘問問gui界面。

資料庫指令
/*查看當前資料庫*/
show dbs;
/* 如果資料庫不存在,則創建資料庫,否則切換到指定資料庫。
   註意:這裡的資料庫並不是一定要存在的,如果不存在,在創建文檔時會自動創建。 
*/
use MyDB;
/*刪除當前數據*/
MyDB.dropDatabase();
/*顯示當前所在數據*/
db;
集合操作指令

查看當前所有集合: show collections;

創建集合語法: db.createCollection(name,options)

name:集合的名稱,options:可選參數,指定有關記憶體大小及索引的選項。

刪除集合語法:db.集合名.drop()

常用命令操作

Employee是我創建的一個集合

插入一條文檔:

db.Employee.insertOne({name:"SimpleWu",Email:"[email protected]",QQ:450255266});

插入多條文檔:

db.Employee.insertMany([
    {
        name:"李白",
        Email:"[email protected]",
        QQ:123456789
    },
    {
        name:"韓信",
        Email:"[email protected]",
        QQ:987654231
    }
]);

插入一條文檔或插入多條文檔:

db.Employee.insert({name:"武則天",Email:"[email protected]",QQ:1111111});
db.Employee.insert([
    {
        name:"嬴政",
        Email:"[email protected]",
        QQ:555555
    },
    {
        name:"安琪拉",
        Email:"[email protected]",
        QQ:66666
    }
])

批量插入文檔:

for(var i = 0 ; i <= 50000 ; i ++ ){
    db.Employee2.insert({num:"魯班" + i + "號"});
}

註意我們這樣插入文檔50000條數據花費了將近20秒這是非常殘酷的,我而我們可以這樣優化,優化後只需要0.5秒。

var array = [];
for(var i = 0;i<=50000;i++){
    array.push({num:"魯班"+ i +"號"});
}
db.Employee2.insert(array);

查詢文檔:

db.Employee.find();

註意:如果在插入時,不指定_id屬性,則資料庫會自動生成一個_id,取值為ObjectId()。如果指定了_id,則不會生成。

更新文檔語法:

db.collection.update(
   <query>,
   <update>,
   {
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>
   }
)

multi : 可選,mongodb 預設是false,只更新找到的第一條記錄,如果這個參數為true,就把按條件查出來多條記錄全部更新。writeConcern :可選,拋出異常的級別。

update預設會用update的對象替換原有對象:

db.Employee.update({name:"李白"},{name:"李小白"});

如果想修改指定的屬性,而不是修改所有內容,則要使用修改操作符。 $set可以用來修改指定屬性

db.Employee.update({name:"李小白"},{$set:{name:"李白"}});

$unset可以移除某個屬性,移除屬性的值可以隨便填

db.Employee.update({name:"武則天"},{$unset:{QQ:""}});

如果匹配到多個,update也只會刪除一條記錄。要刪除多條,需要使用multi屬性

db.Employee.update({name:"SimpleWu"},{$set:{name:"LovelyWu"}},{mluti:true});

save() 方法通過傳入的文檔來替換已有文檔。語法格式如下:

db.collection.save(
   <document>,
   {
     writeConcern: <document>
   }
)

document : 文檔數據。 writeConcern :可選,拋出異常的級別。

註意:若新增數據的主鍵已經存在,則會對當前已經存在的數據進行修改操作。

插入:

db.Employee.save({name:"SimpleWu",gender:"男",email:"[email protected]"});
/*
    _id存在變成更新操作
*/
db.Employee.save({ _id:ObjectId("5bf7b8cde756c09cc38dd79f"),name:"Wu帥帥",gender:"男",email:"[email protected]"});

刪除文檔語法remove() 方法:

db.collection.remove(
   <query>,
   {
     justOne: <boolean>,
     writeConcern: <document>
   }
)
  • query :(可選)刪除的文檔的條件。
  • justOne : (可選)如果設為 true 或 1,則只刪除一個文檔。
  • writeConcern :(可選)拋出異常的級別。
db.Employee.remove({gender:"男"});//刪除所有符合條件的文檔
db.Employee.remove({gender:"男"},{justOne:true});//刪除一條
db.Employee.remove();//刪除集合中所有文檔

查詢文檔:

db.collection.find(query, projection)

參數說明query :可選,使用查詢操作符指定查詢條件

projection :可選,使用投影操作符指定返回的鍵。查詢時返迴文檔中所有鍵值, 只需省略該參數即可(預設省略)。

如果你需要以易讀的方式來讀取數據,可以使用 pretty() 方法,語法格式如下:db.col.find().pretty()

db.Employee.find({name:"SimpleWu"},{gender:0});//查詢name是SimpleWu的文檔數據,排除gender顯示
db.Employee.find({name:"SimpleWu"},{gender:1});//查詢name是SimpleWu的文檔數據,只顯示gender

註意這個0代表的就是排除,1代表的是要它不要其他的,在這裡0和1不能混合使用
在這裡需要註意不管是不是只顯示gender反正我們的_id是特殊的一列,所以我們沒有排除_id它絕對會顯示出來
那麼我們只要顯示gender:1怎麼辦呢很簡單在加個_id=1,但是上面不是說不能0和1混合使用嗎?
在mongoDB中,主鍵是特殊的一個欄位

條件運算符:

等值判斷 $eq:

db.Employee.find({name:"SimpleWu"});
db.Employee.find({name:{$eq:"SimpleWu"}});

判斷小於$lt:

db.Employee.find({QQ:{$lt:450255266}});

判斷大於$gt:

db.Employee.find({QQ:{$gt:450255266}});

判斷小於等於$elt:

db.Employee.find({QQ:{$elt:450255266}});

判斷大於等於egt:

db.Employee.find({QQ:{$egt:450255266}});

與條件判斷:

//判斷name=SimpleWu 同時gender=男
db.Employee.find({name:"SimpleWu",gender:"男"});

或條件判斷:

db.Employee.find({$or:[{name:"武則天"},{name:"SimpleWu"}]});

學習某一項技術首先查詢官方文檔,官方文檔是最全的,並且跟著官方文檔走可以讓我們少掉進許多坑。

總結:

文檔是Mongodb中的最基本數據單元,類似於關係資料庫中的行。

在mongodb中,文檔的鍵通常都是字元串。Mongodb對文檔的鍵是區分大小寫的,對鍵值是區分數據類型的

MongoDB的文件存儲格式為BSON,同JSON一樣支持往其它文檔對象和數組中再插入文檔對象和數組,同時擴展了JSON的數據類型.與資料庫打交 道的那些應用。

MongoDB文檔的欄位非常靈活


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 歷史命令查詢: history 查看使用過的命令 history -c 清空歷史命令 history -w 把緩存的命令寫入到文件中。文件在/root/.bash_history 註:輸出執行過的所有命令,不管對錯,如果需要重新執行某條命令,“!行號”可以再次執行。如!256,就執行了第256行的這 ...
  • Centos6 [root@Centos6 ~]$ hostname # 查看當前的hostnmae Centos6 [root@Centos6 ~]$ vim /etc/sysconfig/network # 編輯network文件修改hostname行(重啟生效) [root@Centos6 ~ ...
  • 1.MTR(mini-transaction) 在MySQL的 InnoDB日誌管理機制中,有一個很重要的概念就是MTR。MTR是InnoDB存儲擎中一個很重要的用來保證物理寫的完整性和持久性的機制。 先看下MTR在MysQL架構中的位置。 MTR是上面的邏輯層與下麵物理層的交互視窗,同時也是用來保 ...
  • Nodejs 操作 Sql Server Intro 最近項目需要爬取一些數據,數據有加密,前端的js又被混淆了,ajax請求被 hook 了,有些複雜,最後打算使用 puppeteer 來爬取數據。 Puppeteer 是谷歌團隊在維護的一個項目,初衷主要是用來做網頁的自動化測試, Google ...
  • 用HBase shell進行表操作 1. 創建student表,表結構包含info和course列族,顯示表結構。 create ‘student’,‘info’,‘course’ desc ‘student’ 2. 修改表結構,course列族返回最大版本數為3,顯示表結構。 alter ‘stu ...
  • MySQL修改表結構操作命令總結 MySQL修改表結構操作命令總結 MySQL修改表結構操作命令總結 以下內容轉自:http://www.jb51.net/article/58079.htm 表的結構如下: 複製代碼代碼如下: mysql> show create table person;| pe ...
  • 從分治演算法說起 要說 MapReduce 就不得不說分治演算法,而分治演算法其實說白了,就是四個字 分而治之 。其實就是將一個複雜的問題分解成多組相同或類似的子問題,對這些子問題再分,然後再分。直到最後的子問題可以簡單得求解。 要具體介紹分治演算法,那就不得不說一個很經典的排序演算法 歸併排序。這裡不說它的 ...
  • 定義 非關係型分散式列式資料庫,支持大數據量查詢(百萬,上億行) 概要 數據存儲:HDFS 數據計算:MapReduce/Spark 服務協調:Zookeeper 特征 列式存儲(列只有一種類型byte[]) 分散式 大數據存儲(百萬,上億行; 上萬列) 伸縮性,擴展性(列根據業務隨意添加) 隨機快 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...