操屁眼的视频在线免费看,日本在线综合一区二区,久久在线观看免费视频,欧美日韩精品久久综

新聞資訊

    介紹

    介紹

    MongoDB是一個文檔數據庫引擎,文檔數據庫和MySQL這種關系型數據庫是不一樣的設計,文檔數據庫和Redis這種Key-Value數據庫也有很大差別。不過文檔數據庫和Key-Value數據庫都屬于NoSQL型的數據庫,也就是說MongoDB也是不支持SQL語句的。

    MongoDB相對于MySQL數據庫來說有一項獨有的非常強大的特點,就是MongoDB的數據表結構是自由的,可以針對每一個文檔(一行數據)定義不同的字段。

    MongoDB的文檔的存儲格式是主流的數據個數JSON,JSON數據是可以設計成一個樹狀結構的,可以將一個對象的屬性以及子屬性、孫屬性甚至更具體的屬性保存到一個JSON數據當中,而MongoDB的一個文檔就可以保存它,而無需事先設計好數據表結構來適應這種對象。

    基本信息








    安裝環境








    CentOS:CentOS Linux release 7.6.1810 (Core)Linux:Linux version 3.10.0-1062.el7.x86_64
    GCC:gcc version 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC)








    軟件版本








    mongodb-linux-x86_64-rhel70-4.2.2.tgz








    準備工作

    本地化




    如果是新環境,我們需要設置時區以保證時間顯示正確

    timedatectl set-timezone Asia/Shanghai

    安裝wget




    如果環境里沒有wget,通過yum安裝一下

    yum -y install wget

    安裝依賴包





    yum -y install libaio numactl-libs

    建立環境根目錄

    mkdir -p /tongfu.net/env/

    建立安裝包目錄并進入

    mkdir /packages
    cd /packages

    安裝MongoDB 4.2

    官網下載

    從官網下載

    wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.2.tgz

    網盤下載

    如果官網下載太慢,可以從網盤下載

    鏈接: https://pan.baidu.com/s/1KjL759qM81Ix_ZRZZxdepg 提取碼: yvpi

    安裝

    設置mongo環境變量

    [root@tfdev env]# vi /etc/profile
    
    export MONGODB_HOME=/tongfu.net/env/mongodb-4.2.2
    export PATH=$MONGODB_HOME/bin:$PATH

    立即啟用環境變量

    source /etc/profile

    創建用戶

    useradd mongo

    解壓縮

    tar -xzvf mongodb-linux-x86_64-rhel70-4.2.2.tgz -C /tongfu.net/env/
    cd /tongfu.net/env/
    mv mongodb-linux-x86_64-rhel70-4.2.2/ mongodb-4.2.2

    建立數據目錄

    mkdir /tongfu.net/env/mongodb-4.2.2/conf
    mkdir /tongfu.net/env/mongodb-4.2.2/data
    mkdir /tongfu.net/env/mongodb-4.2.2/logs

    建立配置文件

    [root@tfdev env]# vi /tongfu.net/env/mongodb-4.2.2/conf/mongodb.conf
    
    dbpath = /tongfu.net/env/mongodb-4.2.2/data/
    logpath = /tongfu.net/env/mongodb-4.2.2/logs/mongodb.log
    bind_ip = 0.0.0.0
    wiredTigerCacheSizeGB = 2
    auth = true
    journal = true

    設置權限

    chown mongo.mongo -R /tongfu.net/env/mongodb-4.2.2/

    自動啟動

    添加自動啟動腳本

    [root@tfdev env]# cat > /lib/systemd/system/mongod.service <<EOF
    [Unit]
    Description=mongod
    After=network.target
     
    [Service]
    Type=forking
    User=mongo
    Group=mongo
    ExecStart=/tongfu.net/env/mongodb-4.2.2/bin/mongod -f /tongfu.net/env/mongodb-4.2.2/conf/mongodb.conf --fork
    ExecStop=/tongfu.net/env/mongodb-4.2.2/bin/mongod -f /tongfu.net/env/mongodb-4.2.2/conf/mongodb.conf --shutdown
    PrivateTmp=true
     
    [Install]
    WantedBy=multi-user.target
    EOF

    運行自動啟動

    systemctl enable mongod # 設置自動啟動 
    
    systemctl start mongod # 啟動服務 
    
    systemctl stop mongod # 停止服務 
    
    systemctl restart mongod # 重啟服務

    服務命令添加到系統目錄

    ln -s /tongfu.net/env/mongodb-4.2.2/bin/mongo /usr/bin/

    連接數據庫admin

    首次登錄,無需用戶名和密碼,直接連接 admin 數據庫

    /tongfu.net/env/mongodb-4.2.2/bin/mongo 127.0.0.1:27017/admin

    創建超級用戶

    設置超級用戶root

    db.createUser(
    	{
    		user:"root",
    		pwd:"abcdef",
    		roles: [
    			{ role:"readWriteAnyDatabase", db:"admin" },
    			{ role:"userAdminAnyDatabase", db:"admin" },
    			{ role:"dbAdminAnyDatabase", db:"admin" }
    		]
    	}
    );

    重新連接數據庫admin

    使用超級用戶root連接數據庫admin

    /tongfu.net/env/mongodb-4.2.2/bin/mongo -uroot -pabcdef 127.0.0.1:27017/admin

    創建數據庫

    創建數據 field

    use field

    插入一條數據到表 field

    db.field.insert({"id":1,"uName":"蘿卜","age":21})

    查詢表 field 的所有數據

    db.field.find()

    插入一條數據到表 logs

    db.logs.insert({"id":1,"event":"create record"})

    查看所有數據庫

    show dbs

    查看所有數據表(集合)

    show collections

    總結

    1. mongodb的數據庫其實就是一個根文件夾
    2. mongodb的數據表就是根文件夾下的子文件夾
    3. mongodb的數據行就是子文件夾下的一個文件,多行數據就是多個文件
    4. mongodb的數據沒有字段概念,就是一個大JSON數據結構,也就是一個字符串
    5. mongodb提供了很多方法去查詢這些數據

    數據導出/導入

    導出數據

    通過下面的命令導出整個數據庫

    mongodump -u $user -p $passwd -h $host --port $port -d $dbname -o $backupDir

    導入數據

    通過下面的命令恢復整個數據庫

    注意:備份出來的目錄下面會有備份的數據庫的文件夾,要指定到這一級才行

    mongorestore -u $user -p $passwd -h $host --port $port -d $dbname $backupDir/$dbname

    MongoDB用戶管理

    創建用戶

    使用無認證模式啟動mongod

    選擇admin數據庫

    use admin

    創建root用戶

    db.createUser(
        {
          user:"root",
          pwd:"123456",
          roles: [ { role:"userAdminAnyDatabase", db:"admin" },{ role:"dbAdminAnyDatabase", db:"admin" },{ role:"readWriteAnyDatabase", db:"admin" } ]
        }
    )

    使用認證模式重啟mongod

    用root登錄到admin

    /tongfu.net/env/mongodb-3.6.2/bin/mongo -u root -p 123456 admin

    選擇test數據庫

    use test

    為test庫創建用戶test

    db.createUser(
        {
          user:"test",
          pwd:"123456",
          roles: [ { role:"dbAdmin", db:"test" },{ role:"readWrite", db:"test" } ]
        }
    )

    退出root登錄

    使用test登錄到test

    /tongfu.net/env/mongodb-3.6.2/bin/mongo -u test -p 123456 test

    修改用戶

    用root登錄到admin

    /tongfu.net/env/mongodb-3.6.2/bin/mongo -u root -p 123456 admin

    選擇test數據庫

    use test

    修改密碼

    db.updateUser(
        'test',
        {
          pwd:"654321"
        }
    )

    刪除用戶

    用root登錄到admin

    /tongfu.net/env/mongodb-3.6.2/bin/mongo -u root -p 123456 admin

    選擇test數據庫

    use test

    刪除test(居然可以刪自己!!!)

    db.dropUser('test')

    查看用戶列表

    1、登錄到admin數據庫

    2、選擇admin數據庫

    use admin

    3、查看用戶列表

    db.system.users.find()

    總結

    1. 創建、修改、刪除用戶必須有權限
    2. 用戶可以刪除自己!!!
    3. 調整哪個庫的用戶表要先選擇哪個庫
    4. 查看用戶列表必須到admin庫下操作
    5. 建議弄一個root超級用戶,然后給每個庫一個獨立賬號

    用戶角色

    Read:允許用戶讀取指定數據庫
    readWrite:允許用戶讀寫指定數據庫
    dbAdmin:允許用戶在指定數據庫中執行管理函數,如索引創建、刪除,查看統計或訪問system.profile
    userAdmin:允許用戶向system.users集合寫入,可以找指定數據庫里創建、刪除和管理用戶
    clusterAdmin:只在admin數據庫中可用,賦予用戶所有分片和復制集相關函數的管理權限。
    readAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的讀權限
    readWriteAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的讀寫權限
    userAdminAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的userAdmin權限
    dbAdminAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的dbAdmin權限。
    root:只在admin數據庫中可用。超級賬號,超級權限

    坑爹一

    認證失敗的解決方法

    剛剛安裝好的環境,使用MongoClient去連接服務器,結果死活報認證錯誤。明明是正確的用戶名,密碼,數據啊~~

    從網上查發現舊版本的mongo擴展用的是 MONGODB-CR認證方式。而最新版的MongoDB服務器得用Scram-SHA-1認證方式

    好吧,升級mongo擴展到1.6.13,解決了~~

    TFAPI操作MongoDB的方法

    示例

    // 引入adodbj包,adodbj為JSON行數據庫的統稱
    linking('dbj.adodbj');
     
    // 連接MongoDB服務器
    $myDbjObj = new adodbj("driver=mongo;server=localhost;port=27017;uid=field;pwd=abcdef;database=field;charset=utf-8;");
    // 查看數據庫列表(需要有訪問admin的權限)
    //$dbArr = $myDbjObj->getDbs(); var_dump($dbArr);
    $condArr = array(
            'domainName'=>array('$regex'=>"ali213" ,'$options'=>"iq"),
        );
    // 查詢數據數量
    $ret = $myDbjObj->count("urls", $condArr); $this->showRet($ret, "count");
    // 查詢所有數據
    $ret = $myDbjObj->search("urls", $condArr, 0, 10, array('_id'=>-1, 'domainName'=>-1));
    foreach ($ret as $itm){
        $this->showRet($itm, "search");
    }
    // 添加記錄,ID為1
    $ret = $myDbjObj->add("urls", array('domainName'=>"www.ali213.net ". rand(1111, 9999) ), 1); $this->showRet($ret, "add");
    // 手動添加1000條數據,ID為1+$i
    for($i=0;$i<1000;$i++){
        $ret = $myDbjObj->mod("urls", $i+1, array('domainName'=>"www.ali213.net ". rand(1111, 9999), 'idx'=>rand(111, 999) ) ); ///$this->showRet($ret, "mod");
    }
    // 通過mod修改一條數據,ID為1
    $ret = $myDbjObj->modRange("urls", array('_id'=>1), array('weight'=>33)); $this->showRet($ret, "modRange");
    // 查看數據,ID為1
    $ret = $myDbjObj->get("urls", 1); $this->showRet($ret, "get");
    // 查看索引
    $ret = $myDbjObj->getIndexes("urls"); $this->showRet($ret, "get indexes");
    // 創建索引
    $ret = $myDbjObj->createIndex("urls", array('domainName'=>1)); $this->showRet($ret, "create index");
    // 刪除索引
    $ret = $myDbjObj->dropIndex("urls", array('domainName'=>1)); $this->showRet($ret, "drop index");
    // 清除所有索引
    $ret = $myDbjObj->dropIndexes("urls"); $this->showRet($ret, "drop indexes");

    TFAPI操作MongoDB的方法(新)

    概念

    新版本的MongoDB驅動完全變了樣,一般情況下我們還是喜歡用舊版本的對象怎么辦呢?沒有關系,官方提供了一個第三方PHP庫,封裝了新版本的PHP擴展的對象,和老版本的對象及其相似我們TFAPI也將這個庫引入了進來,放到了 driver/mongo 下

    使用技巧

    // 引入adodbj包,adodbj為JSON行數據庫的統稱
    linking('dbj.adodbj');
     
    // 連接MongoDB服務器,注意:這里的 driver 是 mongo2 不是 mongo 了!!
    $myDbjObj = new adodbj("driver=mongo2;server=localhost;port=27017;uid=field;pwd=abcdef;database=field;charset=utf-8;");
    // 查看數據庫列表(需要有訪問admin的權限)
    //$dbArr = $myDbjObj->getDbs(); var_dump($dbArr);
    $condArr = array(
            'domainName'=>array('$regex'=>"ali213" ,'$options'=>"iq"),
        );
    // 查詢數據數量
    $ret = $myDbjObj->count("urls", $condArr); $this->showRet($ret, "count");
    // 查詢所有數據
    $ret = $myDbjObj->search("urls", $condArr, 0, 10, array('_id'=>-1, 'domainName'=>-1));
    foreach ($ret as $itm){
        $this->showRet($itm, "search");
    }
    // 添加記錄,ID為1
    $ret = $myDbjObj->add("urls", array('domainName'=>"www.ali213.net ". rand(1111, 9999) ), 1); $this->showRet($ret, "add");
    // 手動添加1000條數據,ID為1+$i
    for($i=0;$i<1000;$i++){
        $ret = $myDbjObj->mod("urls", $i+1, array('domainName'=>"www.ali213.net ". rand(1111, 9999), 'idx'=>rand(111, 999) ) ); ///$this->showRet($ret, "mod");
    }
    // 通過mod修改一條數據,ID為1
    $ret = $myDbjObj->modRange("urls", array('_id'=>1), array('weight'=>33)); $this->showRet($ret, "modRange");
    // 查看數據,ID為1
    $ret = $myDbjObj->get("urls", 1); $this->showRet($ret, "get");
    // 查看索引
    $ret = $myDbjObj->getIndexes("urls"); $this->showRet($ret, "get indexes");
    // 創建索引,只能一個一個創建了
    $ret = $myDbjObj->createIndex("urls", array('domainName'=>1)); $this->showRet($ret, "create index 1");
    $ret = $myDbjObj->createIndex("urls", array('visits'=>2)); $this->showRet($ret, "create index 2");
    // 刪除索引,只能一個一個刪除了
    $ret = $myDbjObj->dropIndex("urls", 'domainName_1'); $this->showRet($ret, "drop index 1");
    $ret = $myDbjObj->dropIndex("urls", 'visits_2'); $this->showRet($ret, "drop index 2");
    // 清除所有索引
    $ret = $myDbjObj->dropIndexes("urls"); $this->showRet($ret, "drop indexes");

    MongoDB查詢技巧

    第一批

    // 特殊查詢語句示例
    // select * from urls where url = 'http://tfapi.tongfu.net/'
    $myDbjObj->search("urls", array('url'=>"http://tfapi.tongfu.net/"));
    // select * from urls where url like 'tongfu.net'
    $myDbjObj->search("urls", array('url'=>array('$regex'=>"tongfu.net")));
    // select * from urls where visit > 100 and visit < 1000
    $myDbjObj->search("urls", array('visit'=>array('$gt'=>100, '$lt'=>1000)));
    // select * from urls where weight between 3 and 5
    $myDbjObj->search("urls", array('weight'=>array('$gte'=>3, '$lte'=>5)));
    // select * from urls where urlType <> 'res'
    $myDbjObj->search("urls", array('urlType'=>array('$ne'=>"res")));
    // select * from urls where urlMediaType in ('avi', 'rmvb', 'rm')
    $myDbjObj->search("urls", array('urlMediaType'=>array('$in'=>array("avi","rmvb","rm"))));
    // select * from urls where urlMediaType not in ('mov', 'mp4')
    $myDbjObj->search("urls", array('urlMediaType'=>array('$nin'=>array("mov","mp4"))));
    // select * from urls where catchTool = 'bd' or catchTimes > 0
    $myDbjObj->search("urls", array('$or'=>array('catchTool'=>"bd", 'catchTimes'=>array('$gt'=>0))));
    
    $myDbjObj->search("urls", array('urlExtension'=>array('$all'=>array("img","js","css"))));

    第二批

    // select * from urls where (_id mod 5) = 1
    $myDbjObj->search("urls", array('_id'=>array('$mod'=>array(5, 1))));
    // select * from urls where not (catchTimes < 100)
    $myDbjObj->search("urls", array('$not'=>array('catchTimes'=>array('$lt', 100))));
    // 數組中元素同時包含full head
    $myDbjObj->search("urls", array('catchType'=>array('$all'=>array('full', 'head'))));
    // 數組中第2個元素為head
    $myDbjObj->search("urls", array('catchTypes.1'=>"head"));
    // 數組元素個數是5個
    $myDbjObj->search("urls", array('catchTypes'=>array('$size'=>5)));
    // 嵌套查詢
    $myDbjObj->search("urls", array('catchInfo.status'=>"fail", 'catchInfo.datetime'=>"2018-1-26 15:12:11"));
    // 嵌套查詢,假定元素是數組的情況下
    $myDbjObj->search("urls", array('catchInfo',array('$elemMatch'=>array('status'=>"fail", 'datetime'=>"2018-1-26 15:12:11"))));
    // 復雜查詢情況(這種方式效率比較慢)
    // 盡量依照 正則 > MapReduce > $where 這個順序設計
    $myDbjObj->search("urls", array('$where',"catchTimes > 0 and catchType == 'head'"));
    $myDbjObj->search("urls", array('$where',"function(){ var result = catchTimes > 0 and catchType == 'head'; return result; }"));
    // 排序,分頁實現
    // 根據_id反序排列,同時從100行開始取10行數據
    $myDbjObj->search("urls", array(), 100, 10, array('_id'=>-1));

    第三批

    // 將鍵weightNum的值進行數字增減操作(只能是數字類型)
    $ret = $myDbjObj->modRange("urls", array('_id'=>1), array('$inc'=>array('weightNum'=>1))); $this->showRet($ret, "modRange $inc");
    // 向滿足條件的文檔設置鍵weightStr值為high(支持嵌套,請使用點符號)
    $ret = $myDbjObj->modRange("urls", array('_id'=>1), array('$set'=>array('weightStr'=>"high"))); $this->showRet($ret, "modRange $set");
    // 從滿足條件的文檔刪除鍵weight.x(支持嵌套,請使用點符號)
    $ret = $myDbjObj->modRange("urls", array('_id'=>1), array('$unset'=>array('weightStr'=>1))); $this->showRet($ret, "modRange $unset");
    // 向滿足條件的文檔的鍵weightRecord數組追加元素值為s1(不檢查重復性)(支持嵌套,請使用點符號)
    $ret = $myDbjObj->modRange("urls", array('_id'=>1), array('$push'=>array('weightRecord'=>"s1"))); $this->showRet($ret, "modRange $push");
    $ret = $myDbjObj->modRange("urls", array('_id'=>1), array('$push'=>array('weightRecord'=>"s1"))); $this->showRet($ret, "modRange $push");
    // 向滿足條件的文檔的鍵weightRecord數組追加元素值為s1(檢查重復性)(支持嵌套,請使用點符號)
    $ret = $myDbjObj->modRange("urls", array('_id'=>1), array('$addToSet'=>array('weightRecord'=>"s1"))); $this->showRet($ret, "modRange $addToSet");
    // 向滿足條件的文檔的鍵weightRecord數組追加一組元素
    $ret = $myDbjObj->modRange("urls", array('_id'=>1), array('$addToSet'=>array('weightRecord'=>array('$each'=>array("s1","s2","s3"))))); $this->showRet($ret, "modRange $each");
    // 使用$pop對鍵weightRecord數組進行刪除元素操作
    // 刪除數組最后位置元素
    $ret = $myDbjObj->modRange("urls", array('_id'=>1), array('$pop'=>array('weightRecord'=>1))); $this->showRet($ret, "modRange $pop");
    // 刪除數組最后位置元素
    $ret = $myDbjObj->modRange("urls", array('_id'=>1), array('$pop'=>array('weightRecord'=>-1))); $this->showRet($ret, "modRange $pop");
    // 刪除數組最后位置元素
    $ret = $myDbjObj->modRange("urls", array('_id'=>1), array('$pop'=>array('weightRecord'=>0))); $this->showRet($ret, "modRange $pop");
    // 刪除數組匹配條件的元素
    $ret = $myDbjObj->modRange("urls", array('_id'=>1), array('$pull'=>array('weightRecord'=>"s2"))); $this->showRet($ret, "modRange $pull");


    https://m.tongfu.net/home/35/blog/100588.html

    MongoDB下載

    下載地址如下:
    https://www.mongodb.com/try/download/community


    選擇適合自己系統的安裝包進行點Download進行下載


    MongoDB安裝

    1.雙擊安裝包進行安裝


    2.點擊I accept the tems in the license agreement,點擊Next


    3.選擇默認安裝路徑,點擊completem;自定義安裝路徑,點擊custom,點擊browse選擇路徑,點擊next;這里我的安裝路徑是:D:\mongodb




    4.取消勾選install MongoDB compass,不要勾選,這是圖形界面,點擊Next;后續我們可以自行下載安裝MongoDB compass這個圖像界面,MongDB compass圖形界面下載地址:https://www.mongodb.com/try/download/compass


    5.點擊install ;

    6.點擊finish,完成安裝;

    MongoDB配置

    環境變量的配置

    首先,進到mongodb的安裝目錄下,找到bin文件夾所在的路徑,我這里的bin所在的路徑是D:\mongodb\bin



    回到桌面,右擊此電腦,點擊屬性,進入如下界面


    再點擊 “高級系統設置”,進入如下界面


    點擊 右下角的 ”環境變量“,進去后,

    找到 “系統變量”中的path,并點擊path;

    進去path編輯模式后,選擇右上角的新建

    把bin文件夾的路徑,粘貼進去




    配置MongoDB服務


    1. 管理員模式打開命令行窗口

    開頭聲明一下,我的mongodb是安裝在D盤中的(D:\mongodb)這個路徑,下面命令行中的命令,我是針對我的安裝路徑進行配置的,其他安裝路徑的,記得在輸入命令之前切換一下路徑就行了。


    2. 創建目錄,執行下面的語句來創建數據庫和日志文件的目錄.

    (記得切換到自己安裝的盤再輸命令,我的安裝在D盤,d: 可以切換到D盤。)

    mkdir d:\data\db
    mkdir d:\data\log

    3. 創建配置文件

    3.1 創建一個配置文件位于 D:\mongodb\mongod.cfg,進入到D:\mongodb\這個路徑后,輸入如下命令創建mongod.cfg文件。

     type nul>mongod.cfg

    3.2 指定 systemLog.path 和 storage.dbPath。具體配置內容如下。

    systemLog: destination: file
        path: d:\data\log\mongod.log
    storage:    dbPath: d:\data\db

    注:win命令行沒有vim編輯器,我們可以在文件夾中找到我們的mongod.cfg這個文件,通過vs code打開,把配置內容粘貼進去,并保存。



    安裝MongoDB服務

    通過執行mongod.exe,使用--install選項來安裝服務,使用--config選項來指定之前創建的配置文件。

    d:\mongodb\bin\mongod.exe --config "d:\mongodb\mongod.cfg" --install

    做到這里,我們就配置好了MongoDB。

    啟動MongoDB服務

    net start MongoDB

    關閉MongoDB服務

    net stop MongoDB
網站首頁   |    關于我們   |    公司新聞   |    產品方案   |    用戶案例   |    售后服務   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權所有