Mongodb非關係型數據庫

1、安裝php

一、windows下的安裝linux

下載地址:http://dl.mongodb.org/dl/win32正則表達式

 添加mongo到服務中:mongodb

開啓服務:shell

啓動文件:數據庫

::表示在此語句後全部運行的命令都不顯示命令行自己
::進入G盤
G:
cd G:\phpstudy\mongodb\bin
mongod   --dbpath "G:\phpstudy\mongodb\data"

二、linux下的安裝
windows

 待續。。。數組

2、shell命令promise

待續。。。服務器

3、可視化工具

連接:https://pan.baidu.com/s/1uTsIVbOAJeSh68uk_Jg1fg
提取碼:s9tb 

Studio 3T 破解教程:

一、建立文件studio3t.bat

@echo off
ECHO 重置Studio 3T的使用日期......
FOR /f "tokens=1,2,* " %%i IN ('reg query "HKEY_CURRENT_USER\Software\JavaSoft\Prefs\3t\mongochef\enterprise" ^| find /V "installation" ^| find /V "HKEY"') DO ECHO yes | reg add "HKEY_CURRENT_USER\Software\JavaSoft\Prefs\3t\mongochef\enterprise" /v %%i /t REG_SZ /d ""
ECHO 重置完成, 按任意鍵退出......
pause>nul
exit

二、將文件studio3t.bat文件移動到以下路徑中

C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp

三、雙擊運行

而後運行studio 3t軟件

4、PHP操做mongodb

SQL查詢語句 Mongo查詢語句
CREATE TABLE USERS (a Number, b Number) 隱式的建立,或 MongoDB::createCollection().
INSERT INTO USERS VALUES(1,1) $db->users->insert(array("a" => 1, "b" => 1));
SELECT a,b FROM users $db->users->find(array(), array("a" => 1, "b" => 1));
SELECT * FROM users WHERE age=33 $db->users->find(array("age" => 33));
SELECT a,b FROM users WHERE age=33 $db->users->find(array("age" => 33), array("a" => 1, "b" => 1));
SELECT a,b FROM users WHERE age=33 ORDER BY name $db->users->find(array("age" => 33), array("a" => 1, "b" => 1))->sort(array("name" => 1));
SELECT * FROM users WHERE age>33 $db->users->find(array("age" => array('$gt' => 33)));
SELECT * FROM users WHERE age<33 $db->users->find(array("age" => array('$lt' => 33)));
SELECT * FROM users WHERE name LIKE "%Joe%" $db->users->find(array("name" => new MongoRegex("/Joe/")));
SELECT * FROM users WHERE name LIKE "Joe%" $db->users->find(array("name" => new MongoRegex("/^Joe/")));
SELECT * FROM users WHERE age>33 AND age<=40 $db->users->find(array("age" => array('$gt' => 33, '$lte' => 40)));
SELECT * FROM users ORDER BY name DESC $db->users->find()->sort(array("name" => -1));
CREATE INDEX myindexname ON users(name) $db->users->ensureIndex(array("name" => 1));
CREATE INDEX myindexname ON users(name,ts DESC) $db->users->ensureIndex(array("name" => 1, "ts" => -1));
SELECT * FROM users WHERE a=1 and b='q' $db->users->find(array("a" => 1, "b" => "q"));
SELECT * FROM users LIMIT 20, 10 $db->users->find()->limit(10)->skip(20);
SELECT * FROM users WHERE a=1 or b=2 $db->users->find(array('$or' => array(array("a" => 1), array("b" => 2))));
SELECT * FROM users LIMIT 1 $db->users->find()->limit(1);
EXPLAIN SELECT * FROM users WHERE z=3 $db->users->find(array("z" => 3))->explain()
SELECT DISTINCT last_name FROM users $db->command(array("distinct" => "users", "key" => "last_name"));
SELECT COUNT(*y) FROM users $db->users->count();
SELECT COUNT(*y) FROM users where AGE > 30 $db->users->find(array("age" => array('$gt' => 30)))->count();
SELECT COUNT(AGE) from users $db->users->find(array("age" => array('$exists' => true)))->count();
UPDATE users SET a=1 WHERE b='q' $db->users->update(array("b" => "q"), array('$set' => array("a" => 1)));
UPDATE users SET a=a+2 WHERE b='q' $db->users->update(array("b" => "q"), array('$inc' => array("a" => 2)));
DELETE FROM users WHERE z="abc" $db->users->remove(array("z" => "abc"));
$doc = [//定義一個文檔,即一個數組
    'First Name' => 'Yang',
    'Last Name' => 'Yang',
    'Age' => 21,
    'Phone' => '110',
    'Address' => [
        'Country' => 'China',
        'City' => 'Shen Zhen'
    ],
    'E-Mail' => [
        '123456@qq.com',
    ]
];

一、插入數據

$mongo = new MongoClient('mongodb://localhost:27017');
//選擇數據庫
$db = $mongo->selectDB("test");
//選擇集合
$collection = $db->selectCollection("admin");

//新增
$res = $collection->insert(array("name" => "yangs"));
var_dump($res); //array(4) { ["n"]=> int(0) ["ok"]=> float(1)  插入成功

二、查詢數據

a、查詢單個數據

$data = $collection->findOne(array("name" => "yangs"));
var_dump($data); //array(4) { ["_id"]=> object(MongoId)#6 (1) { ["$id"]=> string(24) "5d5f9f51146e638c0600002c" } ["name"]=> string(5) "yangs" ["age"]=> int(18) ["like"]=> array(2) { [0]=> string(9) "玩遊戲" [1]=> string(9) "打籃球" } }

  b、查詢多個數據

//查詢全部
$data = $collection->find();
foreach ($data as $k => $v) {
    var_dump($v);
}

c、條件查詢

//條件查詢
//一、mongodb分別使用$lt、$lte、$eq、$gte、$gt、$ne表示<、<=、=、>=、>、<>,用於整數字段查詢
$cursor = $collection->find(array("age" =>array('$gt' =>10)));
while ($doc = $cursor->getNext()){
    var_dump($doc);
}

//二、$in:匹配多個值中任意一個
$cursor = $collection->find(array("Address.Country" => array('$in' => array("China", "USA"))));
while ($doc = $cursor->getNext()){
    var_dump($doc);
}

//三、$all:匹配多個值中全部值(用於數組字段查詢)
$cursor = $collection->find(array("E-Mail" => array('$all' => array("123456@qq.com", "abc@qq.com"))));
while ($doc = $cursor->getNext()){
    var_dump($doc);//
}

//三、$or:或查詢
$cursor = $collection->find(array('$or'=>array(array("Address.Country" => "China"), array("Address.Country" => "USA"))));
while ($doc = $cursor->getNext()){
    var_dump($doc);
}

//四、$slice:獲取數組字段中指定數目的元素,位於find()函數第二個參數中
$cursor = $collection->find(['First Name' => 'Yang'], ['E-Mail' => ['$slice' => 2]]);//只返回前兩個email
$cursor = $collection->find(['First Name' => 'Yang'], ['E-Mail' => ['$slice' => -2]]);//只返回最後兩個email
$cursor = $collection->find(['First Name' => 'Yang'], ['E-Mail' => ['$slice' => [1, 2]]]);//忽略第一個,返回接下來兩個

//五、$exists:根據某個字段是否有設置值進行查詢
$cursor = $collection->find(['Hobby' => ['$exists' => false]]);//查找Hobby字段未設置值的文檔

//六、正則表達式查詢
$cursor = $collection->find(['First Name' => new MongoRegex('/^Ya/i')]);//查找First Name字段以Ya開頭的文檔,忽略大小寫差別

d、彙集查詢 

//聚合查詢
$data = $collection->aggregate(array(
    '$group' => array(
        "_id" => "Address.Country",
        "total" => array('$sum' => 1),//求總和,表示每匹配一個文檔總和就加1
        "minAge" => array('$min' => '$Age'), //分組中Age字段最小值
    )
), [ "cursor" => [ "batchSize" => 0 ] ]);

$res = $collection->aggregate([
    [//過濾條件:只對符合條件的原始文檔進行聚合運算,如果放在'$group'以後則是隻返回符合條件的結果文檔
        '$match' => ['Age' => ['$gt' => 30]]
    ],
    [//指定分組字段、統計字段
        '$group' => [
            '_id' => '$Address.Country',
            'totalAge' => ['$sum' => '$Age']//計算各個分組Age字段總和
        ]
    ],
    //如下操做如果放在'$group'以前則在聚合前做用於原始文檔,若放在'$group'以後則在聚合後做用於結果文檔
    ['$unwind' => '$E-Mail'],//將包含有某個數組類型字段的文檔拆分紅多個文檔,每一個文檔的同名字段的值爲數組中的一個值。
    ['$project' => ['myAge' => '$Age', 'First Name' => '$First Name']],//指定返回字段,能夠對字段進行重命名,格式:返回字段名 => $原來字段名
    ['$skip' => 2],//跳過指定數量的文檔
    ['$limit' => 2],//只返回指定數量的文檔
    ['$sort' => ['totalAge' => 1]]//排序
], [ "cursor" => [ "batchSize" => 0 ] ]);

三、修改

//$set:重置特定鍵的值,若字段不存在則新建字段並賦值
$res = $collection->update(['First Name' => 'Yang'], ['$set' => ['Hobby' => 'pingpong']]);

//$unset:刪除字段
$res = $collection->update(['First Name' => 'Yang'], ['$unset' => ['Hobby' => 1]]);

//$rename:重命名字段,若字段不存在則不進行任何操做
$res = $collection->update(['First Name' => 'Yang'], ['$rename' => ['Hobby' => 'hobby', 'Age' => 'age']]);
//注意:若是文檔中已經使用了指定名稱的字段,則該字段將會被刪除,而後再進行重命名操做。

//$setOnInsert:設置了upsert爲true,而且發生了插入操做的時候,將某個字段設置爲特定的
$res = $collection->update(['First Name' => 'Yang'], ['$setOnInsert' => ['lang' => 'English']], ['upsert' => true]);

//$push:向指定字段添加一個值(做用於數組字段),若字段不存在會先建立字段,若字段值不是數組會報錯
$res = $collection->update(['First Name' => 'Yang'], ['$push' => ['E-Mail' => '123123@qq.com']]);

//$push:向指定字段添加多個值(做用於數組字段),若字段不存在會先建立字段,若字段值不是數組會報錯
$res = $collection->update(['First Name' => 'Yang'], ['$pushAll' => ['E-Mail' => ['666@qq.com', '8888888@qq.com']]]);

//使用$push和$each向某個字段添加多個值(做用於數組字段),若字段不存在會先建立字段,若字段值不是數組會報錯
$res = $collection->update(['First Name' => 'Yang'], ['$push' => ['E-Mail' => ['$each' => ['123123@qq.com', '666@qq.com']]]]);

//$addToSet:將數據添加到數組中(只在目標數組沒有該數據的時候纔將數據添加到數組中)
$res = $collection->update(['First Name' => 'Yang'], ['$addToSet' => ['E-Mail' => '123123@qq.com']]);
$res = $collection->update(['First Name' => 'Yang'], ['$addToSet' => ['E-Mail' => ['$each' => ['123123@qq.com', '666@qq.com']]]]);

//$pop:從數組中刪除一個元素,-1表示刪除第一個元素,1表示刪除最後一個元素(其實負數都刪除第一個元素,0或正數都刪除最後一個元素)
$res = $collection->update(['First Name' => 'Yang'], ['$pop' => ['E-Mail' => 1]]);

//$pull:刪除數組中全部指定值
$res = $collection->update(['First Name' => 'Yang'], ['$pull' => ['E-Mail' => '123123@qq.com']]);

//$pullAll:刪除數組中多個元素的全部值
$res = $collection->update(['First Name' => 'Yang'], ['$pullAll' => ['E-Mail' => ['123123@qq.com', '666@qq.com']]]);

//save()
//參數1:但願保存的信息數組
//參數2:擴展選項
//  fsync:若設置爲true,w參數將被覆蓋爲0,數據將在更新結果返回前同步到磁盤。
//  w:默認爲1;若設置爲0,更新操做將不會獲得確認;使用複製集時可設置爲n,確保主服務器在將修改複製到n個節點後才確認該更新操做
//  j:默認爲false,若設置爲true,數據將在更新結果返回以前寫入到日誌中。
//  wtimeout:默認爲10000(毫秒),用於指定服務器等待接收確認的時間
//  timeout:指定客戶端須要等待服務器響應的超時時間(毫秒)
//注意:若已存在則更新,若不存在則插入;更新時使用參數1指定的信息數組替換整個文檔。
//若想更新則應該在參數1中指定_id鍵的值。
$doc = [//定義一個文檔,即一個數組
    'First Name' => 'y',
    'Last Name' => 'y',
    'Age' => 18,
    'Phone' => '112',
    'Address' => [
        'Country' => 'China',
        'City' => '成都'
    ],
    'E-Mail' => [
        'abc@qq.com',
    ]
];
//$res['ok']=1表示操做成功,$res['updatedExisting']=1表示更新,$res['upserted']=1表示插入
$res = $collection->save($doc);

//findAndModify()
//參數1:指定查詢條件
//參數2:指定用於更新文檔的信息
//參數3:可選,指定但願返回的字段
//參數4:擴展選項
//  sort:以特定順序對匹配文檔進行排序
//  remove:若設置爲true,第一個匹配文檔將被刪除
//  update:若設置爲true,將在被選擇的文檔上執行更新操做
//  new:默認爲false,若設置爲true則返回更新後的文檔,不然返回更新前的文檔
//  upsert:若設置爲true,沒有找到匹配文檔的時候將插入一個新的文檔
$res = $collection->findAndModify(['First Name' => 'y'], ['$push' => ['E-Mail' => '123@qq.com']]);

四、刪除

$res = $collection->remove(array("name" => "admin"));//$res['n']表示刪除了幾個文檔

 5、PHP7以上操做Mongodb

一、查詢

$manager = new MongoDB\Driver\Manager('mongodb://localhost:27017');
$query = new MongoDB\Driver\Query(['age' => 24], ['sort' => ['age' => 1]]);
$cursor = $manager->executeQuery('wjt.friend', $query);
 
$data = [];
foreach($cursor as $doc) {
    $data[] = $doc;
}

二、添加

$manager = new MongoDB\Driver\Manager('mongodb://localhost:27017');
$bulk = new MongoDB\Driver\BulkWrite;
$bulk->insert(['name' => 'JetWu5', 'age' => 26]);
$bulk->insert(['name' => 'JetWu6', 'age' => 26]);
 
$writeConcern = new MongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY, 1000);//可選,修改確認
$res = $manager->executeBulkWrite('wjt.friend', $bulk, $writeConcern);

三、修改

$manager = new MongoDB\Driver\Manager('mongodb://localhost:27017');
$bulk = new MongoDB\Driver\BulkWrite;
$bulk->update(
    ['name' => 'JetWu5'],
    ['$set' => ['age' => 30, 'promise' => 'always smile!']]
);
$writeConcern = new MongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY, 1000);//可選,修改確認
$res = $manager->executeBulkWrite('wjt.friend', $bulk, $writeConcern);
echo '<pre>';
print_r($res);

四、刪除

$manager = new MongoDB\Driver\Manager('mongodb://localhost:27017');
$bulk = new MongoDB\Driver\BulkWrite;
$bulk->delete(['name' => 'JetWu3']);
$bulk->delete(['name' => 'JetWu4']);
$writeConcern = new MongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY, 1000);//可選,修改確認
$res = $manager->executeBulkWrite('wjt.friend', $bulk, $writeConcern);
echo '<pre>';
print_r($res);
相關文章
相關標籤/搜索