http://www.xiaocai.name/emlog/post/35
mongoDB(http://www.mongodb.org)是一種 NoSQL 的文檔型的資料庫管理系統,也就是說不是傳統意義上的關聯式資料庫(類似
Oracle、MS-SQLServer、MySQL等)。傳統意義上的關聯式資料庫,資料是被編碼為二進位格式儲存在表中的,需要用 SQL 陳述式去存取。
NoSQL 的文檔型資料庫,比如 mongoDB,就不同了。(官網)
1.安裝MongoDB.
下載mongodb-win32-i386-1.4.0.zip檔案(地址:http://downloads.mongodb.org/win32/mongodb-win32-i386-1.4.0.zip),將其解壓至D:\mongodb目錄中.建立D:\mongodb\data目錄(用於存放資料庫檔案).
註:BIN目錄中有以下2個檔案,mongod.exe即伺服器端,mongo.exe客服端(在php中用來串連mongodb它進行查詢)
開啟一個CMD,進入D:\mongodb\bin 目錄,運行mongo.exe檔案,出現下面的提示就安裝成功了(這樣就安裝成功了o(╯□╰)o).
MongoDB shell version: 1.6.3
connecting to: test
2.運行MongoDB
首先我們先運行服務端,開啟一個CMD,輸入d:\mongodb\bin\mongod.exe --dbpath d:\mongodb\data,這時候可以看到以下介面.(不要關掉它,將它註冊為系統服務這樣就不用每次啟動它了).
接著開啟一個新的CMD控制台,進入d:\mongodb\bin目錄運行mongo.exe檔案。
下面就可以開始寫代碼了..(不載圖了..太麻煩o(╯□╰)o)
> show dbs ;顯示所有資料庫(預設串連的是test資料庫)
結果:
admin
local
test
> show collections ;顯示當前資料庫下的使有表
結果:
system.indexes
system.users
test
user
xc
> db.xiaocai.insert({name:'xiaocai1',age:'21'}) ;向xiaocai表中插入資料(若表不存在則會自動建立)
> db.xiaocai.find() ;顯示xiaocai表中的所有資料
結果:
{ "_id" : ObjectId("4d5cdd0fdf70000000001560"), "name" : "xiaocai1", "age" : "21" }
> db.xiaocai.remove({name:"xiaocai1"}) ;刪除name欄位為'xiaocai'的資料
> db.xiaocao.find()
下面重點說明一下update
db.collection.update( criteria, objNew, upsert, multi )
criteria : update的查詢條件,類似sql update查詢內where後面的
objNew : update的對象和一些更新的操作符(如$,$inc...)等,也可以理解為sql update查詢內set後面的
upsert : 這個參數的意思是,如果不存在update的記錄,是否插入objNew,true為插入,預設是false,不插入。
multi : mongodb預設是false,只更新找到的第一條記錄,如果這個參數為true,就把按條件查出來多條記錄全部更新。
db.test0.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } ); 只更新了第一條記錄
db.test0.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true ); 全更新了
db.test0.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false ); 只加進去了第一條
db.test0.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true ); 全加進去了
db.test0.update( { "count" : { $gt : 15 } } , { $inc : { "count" : 1} },false,true );全更新了
db.test0.update( { "count" : { $gt : 10 } } , { $inc : { "count" : 1} },false,false );只更新了第一條
對應的SQL參考:
select a,b from users where age=33
db.users.find({age:33},{a:1,b:1})
select * from users where age>33 and age<=40
db.users.find({'age':{$gt:33,$lte:40}})
select * from users order by name DESC
db.users.find().sort({name:-1})
create index myindexname on users(name)
db.users.ensureIndex({name:1})
update users set a=1 where b='q'
db.users.update({b: 'q'},{$set:{a:1}},false,true)
delete from users where z='abc'
db.users.remove({ z: 'abc'})
3.PHP操作MongoDB
安裝MongoDB PHP擴充,:http://github.com/mongodb/mongo-php-driver/downloads(apache
下載V6,iis下載V9),將解壓得到的php_mongo.DLL 檔案拷貝到 PHP 安裝目錄下的 ext
目錄下。在PHP.INI加入extension = php_mongo.dll;重啟apache後可以在phpinfo中找到mongo的資訊.
建立一個php檔案,新增幾條記錄並顯示.
view plaincopy to clipboardprint?
- $conn = new Mongo("mongodb://admin_miss:miss@localhost/test");
- $db = $conn->test; //選擇test資料庫
- $collection = $db->xiaocai; //若此表不存在則會自行建立
- $collection->insert(array('name'=>'aaa','age'=>'21'));
- $collection->insert(array('name'=>'bbb','age'=>'20'));
- $collection->insert(array('name'=>'ccc','age'=>'25'));
-
- $array=array();
- foreach ($collection->find() as $val){
- $array[]=$val;
- }
- print_r($array);
將age為20歲的資料name更新為'edit'
view plaincopy to clipboardprint?
- $collection->update(array('age'=>20),array('$set'=>array('name'=>'edit')),false);
- //不能寫出$collection->update(array('age'=>20),array('name'=>'edit'),false);
刪除資料:
view plaincopy to clipboardprint?
- $collection->remove(array('age'=>20));
資料:
view plaincopy to clipboardprint?
- //串連localhost:27017
- $conn = new Mongo();
- //串連遠程主機預設連接埠
- $conn = new Mongo('test.com');
- //串連遠程主機22011連接埠
- $conn = new Mongo('test.com:22011');
- //MongoDB有使用者名稱密碼
- $conn = new Mongo("mongodb://${username}:${password}@localhost")
- //MongoDB有使用者名稱密碼並指定資料庫blog
- $conn = new Mongo("mongodb://${username}:${password}@localhost/blog");
- //多個伺服器
- $conn = new Mongo("mongodb://localhost:27017,localhost:27018");
http://hi.baidu.com/farmerluo/blog/item/9a23cb13a819bb2fdd540188.html
http://www.searchtb.com/2010/12/a-probe-into-the-mongodb.html
http://www.infoq.com/cn/news/2011/01/nosql-why
http://www.infoq.com/cn/news/2011/01/relation-db-nosql-db視覺化檢視:http://www.mongodb.org/display/DOCS/Admin+UIs