MongoDB 學習

MongoDB 是一個基於分佈式文件存儲的數據庫。由 C++ 語言編寫。旨在爲 WEB 應用提供可擴展的高性能數據存儲解決方案。
MongoDB 是一個介於關係數據庫和非關係數據庫之間的產品,是非關係數據庫當中功能最豐富,最像關係數據庫的。php

1、MongoDB 簡介

MongoDB 是由C++語言編寫的,是一個基於分佈式文件存儲的開源數據庫系統。linux

MongoDB 將數據存儲爲一個文檔,數據結構由鍵值(key=>value)對組成。MongoDB 文檔相似於 JSON 對象。字段值能夠包含其餘文檔,數組及文檔數組。git

clipboard.png

2、Linux平臺安裝MongoDB

1.下載安裝

下載地址:https://www.mongodb.com/downl...web

下載完安裝包,並解壓 tgz(如下演示的是 64 位 Linux上的安裝。sql

curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6.tgz    # 下載
tar -zxvf mongodb-linux-x86_64-3.0.6.tgz                                   # 解壓

sudo mv  mongodb-linux-x86_64-3.0.6/ /usr/local/mongodb                         # 將解壓包拷貝到指定目錄

MongoDB 的可執行文件位於 bin 目錄下,因此能夠將其添加到 PATH 路徑中:mongodb

export PATH=<mongodb-install-directory>/bin:$PATH

// 即,這樣的
export PATH=/usr/local/mongodb/bin:$PATH

<mongodb-install-directory> 爲你 MongoDB 的安裝路徑。如本文的 /usr/local/mongodbshell

2.建立數據庫目錄

MongoDB的數據存儲在data目錄的db目錄下,可是這個目錄在安裝過程不會自動建立,因此你須要手動建立data目錄,並在data目錄中建立db目錄。
如下實例中咱們將data目錄建立於根目錄下(/)。
注意:/data/db 是 MongoDB 默認的啓動的數據庫路徑(--dbpath)。數據庫

mkdir -p /data/db

3.命令行中運行 MongoDB 服務

你能夠再命令行中執行mongo安裝目錄中的bin目錄執行mongod命令來啓動mongdb服務。數組

注意:若是你的數據庫目錄不是/data/db,能夠經過 --dbpath 來指定。php7

$ ./mongod
98 Unable to create/open lock file: /data/db/mongod.lock errno:13 Permission

若是出現這樣的問題,能夠,使用下邊的命令進行權限修改:

sudo chown -R `id -u` /data/db

clipboard.png

4.MongoDB後臺管理 Shell

若是你須要進入MongoDB後臺管理,你須要先打開mongodb裝目錄的下的bin目錄,而後執行mongo命令文件。
MongoDB Shell是MongoDB自帶的交互式Javascript shell,用來對MongoDB進行操做和管理的交互式環境。
當你進入mongoDB後臺後,它默認會連接到 test 文檔(數據庫):
重開一個窗口,而後進入MongoDB後臺

$ cd /usr/local/mongodb/bin
$ ./mongo
MongoDB shell version: 3.0.6
connecting to: test
Welcome to the MongoDB shell.
……

clipboard.png

讓咱們插入一些簡單的數據,並對插入的數據進行檢索:

> db.corwien.insert({name:'corwien'})
WriteResult({ "nInserted" : 1 })
> db.corwien.find()
{ "_id" : ObjectId("5942b5a247b748bc9bd3276a"), "name" : "corwien" }
>

第一個命令將name 'corwien' 插入到 corwien 集合的 name 字段中。

5.MongoDb web 用戶界面

MongoDB 提供了簡單的 HTTP 用戶界面。 若是你想啓用該功能,須要在啓動的時候指定參數 --rest 。

$ ./mongod --dbpath=/data/db --rest

MongoDB 的 Web 界面訪問端口比服務的端口多1000。
若是你的MongoDB運行端口使用默認的27017,你能夠在端口號爲28017訪問web用戶界面,即地址爲:http://localhost:28017

2、MongoDB概念解析

1.MongoDB和SQL語句比較

無論咱們學習什麼數據庫都應該學習其中的基礎概念,在mongodb中基本的概念是文檔、集合、數據庫,下面咱們挨個介紹。
下表將幫助您更容易理解Mongo中的一些概念:

clipboard.png

經過下圖實例,咱們也能夠更直觀的的瞭解Mongo中的一些概念:

clipboard.png

2.數據庫

一個mongodb中能夠創建多個數據庫。
MongoDB的默認數據庫爲"db",該數據庫存儲在data目錄中。
MongoDB的單個實例能夠容納多個獨立的數據庫,每個都有本身的集合和權限,不一樣的數據庫也放置在不一樣的文件中。
"show dbs" 命令能夠顯示全部數據的列表。

$ ./mongo
MongoDB shell version: 3.0.6
connecting to: test
> show dbs
local  0.078GB
test   0.078GB
>

執行 db 命令能夠顯示當前數據庫對象或集合。

$ ./mongo
MongoDB shell version: 3.0.6
connecting to: test
> db
test
>

運行use命令,能夠鏈接到一個指定的數據庫。

> use local
switched to db local
> db
local
>

3.文檔

文檔是一組鍵值(key-value)對(即BSON)。MongoDB 的文檔不須要設置相同的字段,而且相同的字段不須要相同的數據類型,這與關係型數據庫有很大的區別,也是 MongoDB 很是突出的特色。
一個簡單的文檔例子以下:

{"site":"www.runoob.com", "name":"菜鳥教程"}

3、MongoDB數據庫建立和刪除

一、建立

use DATABASE_NAME

若是數據庫不存在,則建立數據庫,不然切換到指定數據庫

> use books
switched to db books
> show dbs
local  0.078GB
test   0.078GB
> db.info.insert({"name":"Jack Ma"})
WriteResult({ "nInserted" : 1 })
> show dbs
books  0.078GB
local  0.078GB
test   0.078GB

能夠看到,咱們剛建立的數據庫 runoob 並不在數據庫的列表中, 要顯示它,咱們須要向 runoob 數據庫插入一些數據。

二、刪除

MongoDB 刪除數據庫的語法格式以下:

db.dropDatabase()

刪除當前數據庫,默認爲 test,你可使用 db 命令查看當前數據庫名。

> show dbs
books  0.078GB
local  0.078GB
test   0.078GB
> db.dropDatabase()
{ "dropped" : "books", "ok" : 1 }
> show dbs
local  0.078GB
test   0.078GB
> use test

4、MongoDB 插入文檔

解釋幾個縮寫吧,省得你們幸苦尋找:

$gt -------- greater than

$gte --------- gt equal

$lt -------- less than

$lte --------- lt equal

$ne ----------- not equal

文檔插入數據:

> db.users.insert({"address":{"city":"guangzhou","state":"guangdong"},"tags":["music","cricket","blogs"],})
WriteResult({ "nInserted" : 1 })

查看:

> db.users.find().pretty();
{
    "_id" : ObjectId("5943a224b4c9662dcc837ba0"),
    "name" : "kaiyi",
    "address" : "beijing"
}
{
    "_id" : ObjectId("5943b6cfb4c9662dcc837ba1"),
    "address" : {
        "city" : "guangzhou",
        "state" : "guangdong"
    },
    "tags" : [
        "music",
        "cricket",
        "blogs"
    ]
}

給數組tags 添加索引:
爲數組 tags 建立索引時,會爲 music、cricket、blogs三個值創建單獨的索引。

> db.users.ensureIndex({"tags":1})
{
    "createdCollectionAutomatically" : false,
    "numIndexesBefore" : 2,
    "numIndexesAfter" : 3,
    "ok" : 1
}

建立索引後,咱們能夠這樣檢索集合的 tags 字段:

> db.users.find({tags:"cricket"})
{ "_id" : ObjectId("5943b6cfb4c9662dcc837ba1"), "address" : { "city" : "guangzhou", "state" : "guangdong" }, "tags" : [ "music", "cricket", "blogs" ] }
>

爲了驗證咱們使用使用了索引,可使用 explain 命令:

> db.users.find({tags:"cricket"}).explain()
{
    "queryPlanner" : {
        "plannerVersion" : 1,
        "namespace" : "test.users",
        "indexFilterSet" : false,
        "parsedQuery" : {
            "tags" : {
                "$eq" : "cricket"
            }
        },
        "winningPlan" : {
            "stage" : "FETCH",
            "inputStage" : {
                "stage" : "IXSCAN",
                "keyPattern" : {
                    "tags" : 1
                },
                "indexName" : "tags_1",
                "isMultiKey" : true,
                "direction" : "forward",
                "indexBounds" : {
                    "tags" : [
                        "[\"cricket\", \"cricket\"]"
                    ]
                }
            }
        },
        "rejectedPlans" : [ ]
    },
    "serverInfo" : {
        "host" : "homestead",
        "port" : 27017,
        "version" : "3.0.6",
        "gitVersion" : "1ef45a23a4c5e3480ac919b28afcba3c615488f2"
    },
    "ok" : 1
}
>

其餘查詢語句解釋:

db.col.find({},{"title":1,_id:0}).limit(2)

補充說明:
第一個 {} 放 where 條件,爲空表示返回集合中全部文檔。
第二個 {} 指定那些列顯示和不顯示 (0表示不顯示 1表示顯示)。

> db.col.find({},{"title":1,_id:0}).limit(2)
{ "title" : "PHP 教程" }
{ "title" : "Java 教程" }

想要讀取從 10 條記錄後 100 條記錄,至關於 sql 中limit (10,100)。

> db.COLLECTION_NAME.find().skip(10).limit(100)

以上實例在集合中跳過前面 10 條返回 100 條數據。
skiplimit 結合就能實現分頁。

當查詢時同時使用sort,skip,limit,不管位置前後 最後執行順序 sort再skip再limit

聚合

db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])

以上實例相似sql語句:

select by_user as _id, count(*) as num_tutorial from mycol group by by_user

5、PHP7 MongDB 安裝與使用

本文教程只適合在 PHP7 的環境,若是你是 PHP5 環境,你能夠參閱

PHP MongDB 安裝與使用。

一、PHP7 Mongdb 擴展安裝

咱們使用 pecl 命令來安裝:
文件下載的地址在:
/tmp/pear/download/mongodb-1.2.9.tgz

// $ /usr/local/php7/bin/pecl install mongodb
pecl install mongodb

擦,出現這樣的錯誤

clipboard.png

sudo apt-get install php7.0-mongodb

on terminal. For the OpenSSL error, try this

sudo apt-get install openssl
相關文章
相關標籤/搜索