MongoDB的使用

来源:http://www.cnblogs.com/qq765065332/archive/2017/12/14/7998371.html
-Advertisement-
Play Games

一、什麼是MongoDB? MongoDB 是一個基於分散式文件存儲的資料庫。 MongoDB 是一個介於關係資料庫和非關係資料庫之間的產品,是非關係資料庫當中功能最豐富,最像關係資料庫的。 MongoDB 將數據存儲為一個文檔,數據結構由鍵值(key=>value)對組成。MongoDB 文檔類似 ...


一、什麼是MongoDB?

  MongoDB 是一個基於分散式文件存儲的資料庫。

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

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

 

二、名詞解析

  1、database  資料庫

  2、collection  數據表/集合

  3、document  數據記錄行/文檔

  4、field      欄位/域

  5、index    索引

  6、primary key  主鍵(自動將_id欄位設置為主鍵)

 

三、什麼是文檔

  MongoDB 的文檔,就相當於sql的數據表。文檔是一組鍵值(key-value)對(即BSON)。

  MongoDB 的文檔不需要設置相同的欄位,並且相同的欄位不需要相同的數據類型,這與關係型資料庫有很大的區別,也是 MongoDB 非常突出的特點。

  一個簡單的文檔例子如下:

    {"name":"菜鳥教程","site":"www.runoob.com","create_time":"2017-12-13"}

  其實文檔的鍵,就相當於表中的欄位,文檔的鍵不能重覆。鍵的命名不能為空字元,不能使用含有特別意義的符號。一般遵循資料庫設計的規範吧,全是英文,用下劃線隔開。

  文檔的鍵值對是有序的。文檔中的值可以不是字元串(甚至可以是整個嵌入的文檔)。MongoDB區分類型和大小寫。

  

四、MongoDB的語法

  1、資料庫:

    ①  use  DATABASE_NAME;  -- 如果資料庫不存在,則創建資料庫,否則切換到指定資料庫。

    ②  db.dropDatabase()  --刪除當前資料庫

  2、數據表/集合:

    ①  db.createCollection(name,option)  -- 創建集合(集合名稱,option是一個文檔,指定有關記憶體大小和索引),option可選

    ②  db.COLLECTION_NAME.drop()  -- 刪除集合

  3、文檔

    ①  db.COLLECTION_NAME.insert(document)  -- 插入文檔

    ②  db.collection.update(query,update,{upsert:boolean,mutli:boolean,writeConcern:document})  -- 更新文檔(該值)

       db.collection.save({_id:ObjectId(),……})  --更新文檔(覆蓋,替換掉整個文檔)

    ③  db.collection.remove(query,{justOne:boolean,writeConcern:document})  -- 刪除文檔

    ④  db.collection.find(document).pretty()  -- 查詢數據(.pretty()可選,以格式化的方式顯示結果)

       db.collection.findOne(document)  -- 查詢數據(只返回第一個文檔)

    參數說明:

      query:查詢條件,找到需要更新的數據,可以理解為sql中的where

      update:update的對象和一些更新的操作符(如$,$inc...)等,可以理解為sql中update中的set

      upsert:可選,預設為false,為true時表示 如果不存在則插入數據

      multi:可選,預設為false,只更新找到的第一條記錄,為true時,則更新找到的全部記錄(意思就是批量更新)

      justOne:可選,如果為true或1,則只刪除一個文檔

      writeConcern:可選,拋出異常的級別

 

五、操作符

  1、條件操作符

    ①  $gt    -- 大於

    ②  $lt     -- 小於

    ③  $gte       -- 大於等於

    ④  $lte     -- 小於等於

    ⑤  $eq     -- 等於

    ⑥  $ne     -- 不等於

    ⑦  $exist    -- 存在

    ⑧  $type     -- 數據類型

    ⑨  $mod     -- 取餘

    ⑩  $regex   -- 正則表達式

  2、邏輯操作符

    ①  $or      -- 或

    ②  $and      -- 與

    ③  $not    -- 非

    ④  $nor    -- 都非

  3、數組操作符

    ①  $all      -- 數組欄位中包含所有指定元素

    ②  $elemMatch  -- 內嵌文檔或數組中的部分欄位(field)

    ③  $size           -- 數組長度

    ④  $slice     -- 數組切片*(分頁)

  4、更新操作符

    ①  $inc       -- 某個欄位值自增/減某個數字

    ②  $mul      -- 某個欄位值乘以某個數字

    ③  $rename     -- 重命名某個欄位名

    ④  $set          -- 更新某個欄位值

    ⑤  $unset         -- 刪除某欄位,若欄位不存在則不操作

    ⑥  $min         -- 比較,若某欄位值大於指定值則更新,設置最小值

    ⑦  $max        -- 比較,若某欄位值小於指定值則更新,設置最大值

    ⑧  $eurrentDate    -- 設置指定欄位為當前時間

    ⑨  $addToSet        -- 添加一個元素到數組中

    ⑩  $pop         -- 刪除數組中的第一個或最後一個元素,-1表示第一個,1表示最後一個

    ⑪  $pullAll     -- 刪除數組或內嵌文檔欄位中所有指定的元素

    ⑫  $pull       -- 刪除滿足條件的元素

    ⑬  $pushAll      -- 棄用,等同於$push和$each連用

    ⑭  $push       -- 更新某個欄位值

    ⑮  $each          -- 配合$push或$addToSet使用

    ⑯  $sort         -- 配合$push使用,表示給文檔中的指定數組元素排序,1是升序,-1是降序

    ⑰  $position     -- 配合$push使用表示往數組元素中的指定位置插入元素

 

六、實例

 1 // 不存在則創建資料庫test
 2 use test;
 3 // 創建集合(表)
 4 db.createCollection('student',{capped:true,size:100000});
 5 // 插入文檔
 6 db.student.insert({"id":1,"code":"2017001","name":"xiaoming","age":18});
 7 db.student.insert({"id":2,"code":"2017002","name":"小紅","age":19});
 8 // 插入多個文檔
 9 db.student.insert({"id":3,"code":"2017003","name":"小強","age":20},{"id":4,"code":"2017004","name":"小剛","age":20});
10 // 更新文檔
11 // 名字寫錯了,更新名字(某欄位)的值,只更新第一條記錄
12 db.student.update({"id":1},{$set:{"name":"小明"}});
13 // 批量更改
14 db.student.update({"age":20},{$set:{"age":21}},{mutli:true});
15 // 小剛過生日了,年齡加1
16 db.student.update({"name":"小剛"},{$inc:{"age":1}});
17 // save的更新操作:如果集合內已經存在 一個和obj相同的id記錄,剛替換,不存在剛插入obj
18 db.student.save({"id":2,"code":"2017002","name":"大紅","age":25});
19 //將返回集合中所有文檔
20 db.student.find({});  //db.student.find();
21 // 查詢年齡大於19的學生
22 db.sudent.find({"age":{$gt:19}});
23 // 查詢小強的學號,_id總是被返回,設置為0移除掉
24 db.student.findOne({"name":"小強"},{"code":1,"_id":0});
25 // 查詢名字都是小強且年齡大於等於20歲的同學
26 db.student.find({$and:[{"name":"小強"},{"age":{$gte:20}]});     // 等同於: db.sudent.find({"name":"小強","age":{$gte:20}});
27 // 清空集合student的文檔
28 db.student.remove({});//db.student.remove();

 

 

七、參考鏈接

  http://www.runoob.com/mongodb/mongodb-tutorial.html

  http://chenzhou123520.iteye.com/blog/1637629

  http://blog.csdn.net/qq_16313365/article/details/58599253

 


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

-Advertisement-
Play Games
更多相關文章
  • 1.mongodb下載地址https://www.mongodb.com/download-center#community 2.安裝 3.在D:\MongoDB目錄下創建db和log兩個文件夾,並創建環境變數,如下圖所 4.以超級管理員的身份打開cmd,以auth的方式註冊服務sc create ...
  • 我們知道Redis支持五種數據類型, 分別是字元串、哈希表(map)、列表(list)、集合(set)和有序集合,和Java的集合框架類似,不同數據類型的數據結構實也是不一樣的。 1.Redis中的redisObject對象 Redis是使用C編寫的,內部實現了一個struct結構體redisObj ...
  • 由於資料庫伺服器崩潰,造成了無法進入系統進行資料庫備份,只能把oracle相關文件拷貝出來。對於拷貝出來的文件在測試機上進行一次不完全恢復,具體流程如下所示: 1、安裝oracle 10g服務端並創建一個與要進行恢復的資料庫相同名稱的實例(db_name,sid,字元集一樣,因為在創建控制文件時,會 ...
  • 簡介 資料庫快照,正如其名稱所示那樣,是資料庫在某一時間點的視圖。快照設計最開始的目的是為了報表服務。比如我需要出2011的資產負債表,這需要數據保持在2011年12月31日零點時的狀態,則利用快照可以實現這一點。快照還可以和鏡像結合來達到讀寫分離的目的。下麵我們來看什麼是快照。 什麼是快照 資料庫 ...
  • Oracle 9i 開始支持閃回,Oracle10g開始全面支持閃回功能,Oracle11g有所完善,為大家快速的恢複數據,查詢歷史數據提供了很大的便捷方法。 本文主要對Oracle常用閃回使用做些詳細介紹,其中對於不常用的事務和版本閃回,這裡就不做介紹 一、Oracle閃回概述 二、Oracle閃 ...
  • 引言 在上一篇中 "大數據學習系列之二 HBase環境搭建(單機)" 中,成功搭建了Hadoop+HBase的環境,本文則主要講述使用Java 對HBase的一些操作。 一、事前準備 1.確認hadoop和hbase成功啟動 2.確認防火牆是否關閉 3.maven所需要的依賴架包 4.修改hosts ...
  • 資料庫簡介、資料庫相關產品、Mysql簡介、mysql資料庫的安裝、客戶端與伺服器端模型、客戶端與伺服器端模型、MySQL管理、mysql多實例配置、mysql忘記密碼怎麼辦? ...
  • 一、數據更新 示例1:把表名為“aa”的表中欄位"a"的值為“1”的數據更新兩個欄位的數據如下 備註: 只更新第一條記錄: db.col.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } ); 全部更新: 只添加第一條: ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...