初學MongoDB實踐筆記——安裝、建立資料庫、儲存及查詢資料,初學mongodb

來源:互聯網
上載者:User

初學MongoDB實踐筆記——安裝、建立資料庫、儲存及查詢資料,初學mongodb

        MongoDB是一個可擴充、高效能的分布式文檔儲存資料庫,由C 語言編寫,旨在為web應用提供可擴充的高效能資料儲存解決方案。它的特點是高效能、易部署、易使用,儲存資料非常方便。

        Mongo DB 是目前在IT行業非常流行的一種非關係型資料庫(NoSql),其靈活的資料存放區方式備受當前IT從業人員的青睞。Mongo DB很好的實現了物件導向的思想(OO思想),在Mongo DB中每一條記錄都是一個Document對象。Mongo DB最大的優勢在於所有的資料持久操作都無需開發人員手動編寫SQL語句,直接調用方法就可以輕鬆的實現CRUD操作。

        文檔資料庫介紹:

        MongoDB資料庫中一條記錄是一個文檔,他的資料結構由(field)和值(value)成對的組成。MongoDB文檔類似於JSON對象。欄位(域)的值可以包含其他文檔、數組和文檔數組。

        如所示MongoDB文檔結構:

               

        使用文檔資料庫的優勢如下:

        在許多程式設計語言中,文檔(即對象)適合原生資料類型;

        嵌入式文檔和數組減少昂貴的關係型關聯需要;

        動態資料結構模式支援流暢的可擴充多態性。

安裝

        官方網站:http://www.mongodb.org/downloads,下載Windows 64bit地址。

        MongoDB在Windows 7上的安裝運行很方便。直接下載、解壓,然後運行bin/mongod 即可啟動伺服器,運行bin/mongo 即可運行命令列用戶端。

        我是使用預設安裝到C盤Program Files\MongoDB 2.6 Standard目錄下,為了方便學習,將其拷貝到C盤根目錄下,為C:\MongoDB。

        注意:請最好不要安裝到C盤Program Files目錄下,而且安裝目錄不要包含空格,否則,將麻煩些,也就是命令列參數每個參數要用“”括起來,例如:

        repeat    "I am hungry"    now

        命令會把字串"I am hungry"分配給argv[1],把字串"now"分配給argv[2]。


        在啟動MongoDB之前,我們必須建立一個存放mongoDB資料和日誌的目錄。資料庫目錄:C:\MongoDB\data\db\,日誌目錄:C:\MongoDB\data\。


啟動服務

        開啟CMD視窗,進入到C:\MongoDB\bin目錄下,運行服務端mongod.exe。

        C:\MongoDB\bin>mongod.exe --dbpath=C:\MongoDB\data\db --directoryperdb --logpath=C:\MongoDB\data\logs --logappend


        註:如果服務未啟動成功,主要是兩個原因,一是未建data\db\目錄;以及防火牆不允許開放服務所需連接埠。


        運行用戶端

        再開啟一個CMD視窗,進入到C:\MongoDB\bin目錄下,運行用戶端mongo.exe來登入MongoDB。(要保持服務端mongod.exe的視窗不關閉)


Java開發資料庫驅動

        驅動Jar包連結地址,驅動ZIP包連結地址。https://github.com/mongodb/mongo-java-driver/releases


在用戶端練習

        刪除使用者:db.dropUser('username')

        建立OA資料庫:use OA

        註:如果不做其他動作,則OA資料庫是不會被建立的。

        建立collections:OA.createCollection("mytest");

        查看資料庫:

        > show dbs
        OA     0.078GB
        admin  0.078GB
        db     (empty)
        local  0.078GB
        test   (empty)

        查看Collection(相當於“表”):

        > show collections


        建立文檔資料資料表,並插入資料記錄。

        > use OA

        switched to db OA

        > db.createCollection("doctest")

        { "ok" : 1 }

        > db.doctest.save({id:1,name:'ttest1'});

        WriteResult({ "nInserted" : 1 })

        > db.doctest.save({id:2,name:'ttest1',code:'102'});

        WriteResult({ "nInserted" : 1 })

        > db.doctest.save({id:3,name:'ttest3',code:'103',class:'doc'});

        WriteResult({ "nInserted" : 1 })

        > db.doctest.save({id:4,name:'ttest4',code:'104'});

        WriteResult({ "nInserted" : 1 })


        查詢

        查詢資料數量(count)

        > db.doctest.find().count();

        4

        條件(=)查詢,條件為:name="ttest1"。

        > db.doctest.find({"name":"ttest1"});

        { "_id" : ObjectId("54a1003556a081db9d632745"), "id" : 1, "name" : "ttest1" }

        { "_id" : ObjectId("54a1005756a081db9d632746"), "id" : 2, "name" : "ttest1", "code" : "102" }

        條件(>=)查詢,條件為:id>3。

        > db.doctest.find({id:{$gt:3}});

        { "_id" : ObjectId("54a100a056a081db9d632748"), "id" : 4, "name" : "ttest4", "code" : "104" }

        > db.doctest.find({id:{$gte:3}});

        { "_id" : ObjectId("54a1008c56a081db9d632747"), "id" : 3, "name" : "ttest3", "code" : "103", "class" : "doc" }

        { "_id" : ObjectId("54a100a056a081db9d632748"), "id" : 4, "name" : "ttest4", "code" : "104" }

        條件(in)查詢,條件為:id in (2,3)。

        > db.doctest.find({id:{$in:[2,3]}});

        說明:$gt : >               --(Greater than 的首字母)

                    $gte : >=           --(Greater than or equal 的首字母)

                    $lt :<                  --(Less than 的首字母)

                    $lte :<=             --(Less than  or equal  的首字母)

                    $ne : !=             --(Not equal  的首字母)


        推薦用戶端工具

        1. MongoVUE ,http://blog.mongovue.com/ 


資料庫設計

        MongoDB 無固定結構,每張表每段資料可以有不同的結構,這既是好處也是缺點,缺點在於你必須很瞭解MongoDB的表結構,這其實給維護人員帶來一定的不適應和麻煩。

        此問題也很容易解決,就是增加表結構定義表,用於說明各種情況下的結構定義,例如可配置審批單,就是比較適用。

        嵌套式設計,例如審批單帶有明細項目,其中,明細項目是多行資料內容,則操作如下:

        >db.doctest.save({id:5,name:'ttest5',code:'106',detail:[{item:'測試卡1',type:'Card',acount:3},{item:'測試卡2',type:'Card',acount:5}]});

        查詢其中型號(Type)是“Mobile”的記錄,在操作如下:

        > db.doctest.find({"detail.type":"Mobile"});
        { "_id" : ObjectId("54a39ebdd8389293ac59e78a"), "id" : 6, "name" : "ttest6", "code" : "107", "detail" : [ { "item" : "員工卡1", "type" : "Card", "acount" : 3 }, { "item" : "測試手機", "type" : "Mobile", "acount" : 5 } ] }

        查看審批單的設計:

> db.doctest.find();



查詢內嵌文檔

        查詢文檔有兩種方式,一種是完全匹查詢,另一種是針對鍵值對查詢!內嵌文檔的完全符合查詢和數組的完全符合查詢一樣,內嵌文檔內鍵值對的數量,順序都必須一致才會匹配,如下例:

    

        針對內嵌文檔特定鍵值對的查詢是最常用的!通過點標記法來精確表示內嵌文檔的鍵。


參考:Introduction to MongoDB

           學習MongoDB--(4-2):MongoDB查詢(數組、內嵌文檔和$where)

           mongodb的查詢語句學習摘要

           百度百科MongoDB

           大資料廠商聯盟 MongoDB

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.