Mongodb

NoSQL(Not Only SQL )

    非關係型數據庫以鍵值對(key-value)存儲,它的結構不固定,每一條記錄可以有不一樣的鍵,每條記錄可以根據需要增加一些自己的鍵值對,這樣就不會侷限於固定的結構,可以減少一些時間和空間的開銷.


    在優勢方面主要體現在下面幾點:

簡單的擴展

快速的讀寫

低廉的成本

靈活的數據模型


    在不足方面主要有下面幾點:

不提供對SQL的支持

支持的特性不夠豐富

現有的產品不夠成熟


MongoDB

下載 http://www.mongodb.org/downloads

    用C++語言編寫的非關係型數據庫。特點是高性能、易部署、易使用,存儲數據十分方便,主要特性有:

    面向集合存儲,易於存儲對象類型的數據

    模式自由

    支持動態查詢

    支持完全索引,包含內部對象

    支持複製和故障恢復

    使用高效的二進制數據存儲,包括大型對象

    文件存儲格式爲BSON(一種JSON的擴展)


MongoDB基本概念

    1. 文檔(document)是MongoDB中數據的基本單元,非常類似於關係型數據庫系統中的行(但是比行要複雜的多)

    2. 集合(collection)就是一組文檔,如果說MongoDB中的文檔類似於關係型數據庫中的行,那麼集合就如同表

    3. MongoDB的單個計算機可以容納多個獨立的數據庫,每一個數據庫都有自己的集合和權限

    4. MongoDB自帶簡潔但功能強大的JavaScript shell,這個工具對於管理MongoDB實例和操作數據作用非常大

    5. 每一個文檔都有一個特殊的鍵"_id",它在文檔所處的集合中是唯一的,相當於關係數據庫中的表的主鍵



MongoDB數據類型

數據類型      描述                                 舉例

null      表示空值或者未定義的對象                      {"x":null}

布爾值      真或者假:true或者false                      {"x":true}

32位整數      32位整數。shell是不支持該類型的,shell中默認會轉換成64位浮點數  

64位整數      64位整數。shell是不支持該類型的,shell中默認會轉換成64位浮點數  

64位浮點數    64位浮點數。shell中的數字就是這一種類型      {"x":3.14,"y":3}

字符串      UTF-8字符串                              {"foo":"bar"}

符號      shell不支持,shell會將數據庫中的符號類型的數據自動轉換成字符串  

對象id      文檔的12字節的唯一id                      {"id": ObjectId()}

日期      從標準紀元開始的毫秒數                      {"date":new Date()}

正則表達式    文檔中可以包含正則表達式,遵循JavaScript的語法  {"foo":/foobar/i}

代碼      文檔中可以包含JavaScript代碼              {"x":function() {}}  

未定義      undefined                              {"x":undefined}

數組      值的集合或者列表                              {"arr": ["a","b"]}

內嵌文檔          文檔可以作爲文檔中某個key的value       {"x":{"foo":"bar"}}



安裝MongoDB 

    將下載的MongoDB的壓縮文件解壓到任意目錄,並將其中的bin目錄加入到系統的path環境變量中即可。

    在啓動MongoDB之前,要手動創建一個存放MongoDB數據文件的目錄,如D:\mongo_data

    在命令行執行 mongod --dbpath=D:\mongo_data

    

    在命令行中可以使用mongo命令連接到MongoDB服務器,如下,輸入mongo命令默認連接到本地的名稱爲test的數據庫,如果希望連接到遠程數據庫,可以使用mongo ip:port


    創建數據庫,使用命令 use 數據庫名稱 ,如:use mydb1


     刪除當前數據庫,使用命令 db.dropDatabase()


     查看所有數據庫,使用命令 show dbs 


     查看當前數據庫中所有的集合,使用命令 show collections 或使用show tables查看當前所在數據庫,使用命令 db


    創建集合有兩種方式,顯示創建和隱式創建

    顯示創建可以使用命令 db.createCollection(“集合名稱")


    隱式創建可以使用命令 db.集合名稱.insert({}),指創建集合並同時向集合中插入數據,例如:db.customer.insert({name:”jack”})


    向集合添加文檔,使用命令 db.集合名稱.insert({}),例如:

        db.user1.insert({name:”jack”,age:20})


刪除集合中的文檔,

    使用命令 db.集合名稱.remove({刪除條件}),不加刪除條件爲刪除集合中的所有文檔,例如,db.c1.remove() 爲刪除c1集合中的所有文檔,db.c1.remove({name:”user1”})爲刪除c1集合中name爲user1的文檔


查詢集合中的文檔,

    可以使用命令 db.集合名稱.find({條件}),或者使用 db.集合名稱.findOne()  查詢第一個文檔

    查詢集合中的文檔,返回某些特定的鍵值

    查詢集合中的文檔 ,使用條件表達式(<, <=, >, >=,!=)

        //大於: field > value

        db.collection.find({field:{$gt:value}});

        

        //小於: field < value

        db.collection.find({field:{$lt:value}});

        

        //大於等於: field >= value

        db.collection.find({field:{$gte:value}});

        

        //小於等於: field <= value

        db.collection.find({field:{$lte:value}});

        

        //不等於:  field != value

        db.collection.find({field:{$ne:value}});


    查詢集合中的文檔 ,統計(count)、排序(sort)、分頁(skip、limit)

        db.customer.count();

        db.customer.find().count();

        db.customer.find({age:{$lt:5}}).count();

        db.customer.find().sort({age:1}); 降序-1

        db.customer.find().skip(2).limit(3);

        db.customer.find().sort({age:-1}).skip(2).limit(3);

        db.customer.find().sort({age:-1}).skip(2).limit(3).count();

        db.customer.find().sort({age:-1}).skip(2).limit(3).count(0);

        db.customer.find().sort({age:-1}).skip(2).limit(3).count(1);


    查詢集合中的文檔 ,$all主要用來查詢數組中的包含關係,查詢條件中只要有一個不包含就不返回

    查詢集合中的文檔 ,$in,類似於關係型數據庫中的IN

    查詢集合中的文檔 ,$nin,與$in相反

    查詢集合中的文檔 ,$or,相當於關係型數據庫中的OR,表示或者的關係,例如查詢name爲user2或者age爲3的文檔,命令爲:

    db.customer.find({$or:[{name:”user2”},{age:3}]})

     查詢集合中的文檔 ,$nor,表示根據條件過濾掉某些數據,例如查詢name不是user2,age不是3的文檔,命令爲:

    db.customer.find({$nor:[{name:”user2”},{age:3}]})

     查詢集合中的文檔 ,$exists,用於查詢集合中存在某個鍵的文檔或不存在某個鍵的文檔,例如查詢customer集合中存在name鍵的所有文檔,可以使用 db.customer.find({name:{$exists:1}}),

    $exists:1表示真,指存在

    $exists:0表示假,指不存在

    查詢集合中的文檔 ,類似於關係型數據庫,mongodb中也有遊標的概念



 更新集合中的文檔,語法如下

    db.collection.update(criteria,objNew,upsert,multi)

    

    參數說明:

    criteria:用於設置查詢條件的對象

    objNew:用於設置更新內容的對象

    upsert:如果記錄已經存在,更新它,否則新增一個記錄,取值爲0或1

    multi:如果有多個符合條件的記錄,是否全部更新,取值爲0或1

    

    注意:默認情況下,只會更新第一個符合條件的記錄

    一般情況下後兩個參數分別爲0,1 ,即:

    db.collection.update(criteria,objNew,0,1)


    更新集合中的文檔, $set 用來指定一個鍵的值,如果這個鍵不存在,則創建它。例如:

    給name爲user1的文檔添加address,可以使用命令:db.c1.update({name:”user1”},{$set:{address:”bj”}},0,1)

    將name爲user1的文檔修改address爲tj,其它鍵值對不變,命令爲:

    db.c1.update({name:”user1”},{$set:{address:”tj”}},0,1)



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章