MongoDB

一. 簡介

  1. 什麼是MongoDB
    MongoDB 是一個跨平臺的,面向文檔的數據庫,是當前 NoSQL 數據庫產品中最熱門的一種。它介於關係數據庫和非關係數據庫之間,是非關係數據庫當中功能最豐富,最像關係數據庫的產品。它支持的數據結構很是鬆散,是相似 JSON 的 BSON 格式,所以能夠存儲比較複雜的數據類型。java

  2. MongoDB特色
    MongoDB 最大的特色是他支持的查詢語言很是強大,其語法有點相似於面向對象的查詢語言,幾乎能夠實現相似關係數據庫單表查詢的絕大部分功能,並且還支持對數據創建索引。它是一個面向集合的,模式自由的文檔型數據庫。正則表達式

  3. 具體特色總結以下:
    • 面向集合存儲,易於存儲對象類型的數據
    • 模式自由
    • 支持動態查詢
    • 支持徹底索引,包含內部對象
    • 支持複製和故障恢復
    • 使用高效的二進制數據存儲,包括大型對象(如視頻等)
    • 自動處理碎片,以支持雲計算層次的擴展性
    • 支持 Python,PHP,Ruby,Java,C,C#,Javascript,Perl 及 C++語言的驅動程序,社區中也提供了對 Erlang 及.NET 等平臺的驅動程序
    • 文件存儲格式爲 BSON(一種 JSON 的擴展)
  4. MongoDB體系結構
    MongoDB 的邏輯結構是一種層次結構。主要由:文檔(document)、集合(collection)、數據庫(database)這三部分組成的。邏輯結構是面向用戶的,用戶使用 MongoDB 開發應用程序使用的就是邏輯結構。spring

    • MongoDB 的文檔(document),至關於關係數據庫中的一行記錄。
    • 多個文檔組成一個集合(collection),至關於關係數據庫的表。
    • 多個集合(collection),邏輯上組織在一塊兒,就是數據庫(database)。
    • 一個 MongoDB 實例支持多個數據庫(database)。

    文檔(document)、集合(collection)、數據庫(database)的層次結構以下圖:

    mongodb

  5. 數據類型
    基本數據類型
    • null:用於表示空值或者不存在的字段,{「x」:null}
    • 布爾型:布爾類型有兩個值true和false,{「x」:true}
    • 數值:shell默認使用64爲浮點型數值。{「x」:3.14}或{「x」:3}。對於整型值,可使用
    • NumberInt(4字節符號整數)或NumberLong(8字節符號整數),
    • {「x」:NumberInt(「3」)}{「x」:NumberLong(「3」)}
    • 字符串:UTF-8字符串均可以表示爲字符串類型的數據,{「x」:「呵呵」}
    • 日期:日期被存儲爲自新紀元依賴通過的毫秒數,不存儲時區,{「x」:new Date()}
    • 正則表達式:查詢時,使用正則表達式做爲限定條件,語法與JavaScript的正則表達式相同,{「x」:/[abc]/}
    • 數組:數據列表或數據集能夠表示爲數組,{「x」: [「a「,「b」,」c」]}
    • 內嵌文檔:文檔能夠嵌套其餘文檔,被嵌套的文檔做爲值來處理,{「x」:{「y」:3 }}
    • 對象Id:對象id是一個12字節的字符串,是文檔的惟一標識,{「x」: objectId() }
    • 二進制數據:二進制數據是一個任意字節的字符串。它不能直接在shell中使用。若是要將非utf-字符保存到數據庫中,二進制數據是惟一的方式。

    代碼:查詢和文檔中能夠包括任何JavaScript代碼,{「x」:function(){/…/}}shell

二. 走進MongoDB

  1. window系統MongoDB安裝
    雙擊安裝,並將 D:\Program Files\MongoDB\Server\3.2\bin 添加到path數據庫

    • 首先打開命令提示符,建立一個用於存放數據的目錄
    md d:\data
    • 啓動服務
    mongod --dbpath=d:\data

    咱們在啓動信息中能夠看到,mongoDB的默認端口是27017
    若是咱們想改變默認的啓動端口,能夠經過--port來指定端口在命令提示符輸入如下命令便可完成登錄 mongo
    退出mongodb exit數組

  2. 查詢命令
    • use spit 建立數據庫
    • db.spit.find() 查詢全部
    • db.spit.insert({content:"最近有點冷",visits:10 }) 插入
    • db.spit.find({"_id":1}) 按照id查詢
    • db.spit.find({"userid":"1013"}) 根據字段查詢
    • db.spit.findOne({"userid":"1013"})按字段查詢一條數據
  3. 修改命令
    • db.spit.update({"_id":1},{"content":"我在桂電讀書"}) 修改 。其餘字段設置爲空
    • db.spit.update({_id:"2"},{$set:{visits:NumberInt(2000)}}) 修改,其餘字段不變
  4. 刪除命令
    • db.集合名稱.remove(條件),好比:db.spit.remove({visits:1000}) 刪除visits =1000的數據
    • db.spit.remove({}) 所有刪除,請慎用
  5. 統計條數
    • db.spit.count() 統計所有條數
    • db.spit.count({userid:"1013"}) 按條件統計,統計userid爲1013的記錄條數
  6. 模糊查詢
  7. 大於 小於 不等於
    <, <=, >, >= 這個操做符也是很經常使用的,格式以下
    • db.集合名稱.find({ "field" : { $gt: value }}) // 大於: field > value
    • db.集合名稱.find({ "field" : { $lt: value }}) // 小於: field < value
    • db.集合名稱.find({ "field" : { $gte: value }}) // 大於等於: field >= value
    • db.集合名稱.find({ "field" : { $lte: value }}) // 小於等於: field <= value
    • db.集合名稱.find({ "field" : { $ne: value }}) // 不等於: field != value

    示例:查詢吐槽瀏覽量大於1000的記錄 db.spit.find({visits:{$gt:1000}})數據結構

  8. 包含與不包含
    包含使用$in操做符。框架

    db.spit.find({userid:{$in:["1013","1014"]}})

    不包含使用$nin操做符.雲計算

    db.spit.find({userid:{$nin:["1013","1014"]}})
  9. 條件鏈接
    咱們若是須要查詢同時知足兩個以上條件,須要使用$and操做符將條件進行關聯。(至關於SQL的and)

    $and:[ { },{ },{ } ]

    示例:查詢吐槽集合中visits大於等於1000 而且小於2000的文檔

    db.spit.find({$and:[ {visits:{$gte:1000}} ,{visits:{$lt:2000} }]})

    若是兩個以上條件之間是或者的關係,咱們使用 操做符進行關聯,與前面and的使用方式相同

    $or:[ { },{ },{ } ]

    示例:查詢吐槽集合中userid爲1013,或者瀏覽量小於2000的文檔記錄

    db.spit.find({$or:[ {userid:"1013"} ,{visits:{$lt:2000} }]})
  10. 列值增加
    若是咱們想實現對某列值在原有值的基礎上進行增長或減小,可使用$inc運算符來實現

    db.spit.update({_id:"2"},{$inc:{visits:NumberInt(1)}} )

三. Java操做MongoDB

  1. mongodb-driver
    mongodb-driver是mongo官方推出的java鏈接mongoDB的驅動包,至關於JDBC驅動。咱們經過一個入門的案例來了解mongodb-driver的基本使用

  2. 代碼實現

    <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongo-java-driver</artifactId>
            <version>3.11.1</version>
        </dependency>
    public class MongoDemo1 {
    public static void main(String[] args) {
        MongoClient client=new MongoClient("192.168.58.128");//建立鏈接
        MongoDatabase spitdb = client.getDatabase("spitdb");//打開數據庫
        MongoCollection<Document> spit = spitdb.getCollection("spit");//
        BasicDBObject bson=new BasicDBObject("userid","1013");// 構建查詢
        FindIterable<Document> documents = spit.find(bson);//查詢記錄獲取結
        for(Document document:documents){ //
            System.out.println("內容:"+ document.getString("content"));
            System.out.println("用戶ID:"+document.getString("userid"));
            System.out.println("瀏覽量:"+document.getInteger("visits"));
        }
        client.close();//關閉鏈接
    }
    }

四. SpringDataMongoDB

  1. SpringData家族成員之一,用於操做MongoDb的持久層框架,封裝了底層的mongodbdriver。

  2. 有序列表項 二
  3. 有序列表項 三
  4. 有序列表項 一
  5. 有序列表項 二
  6. 有序列表項 三
  7. 有序列表項 一
  8. 有序列表項 二
  9. 有序列表項 三
  10. 有序列表項 三

相關文章
相關標籤/搜索