開始MongoDB 之旅
Luo Weifeng 2011-6-28
環境: Ubuntu 11.04
安裝MongoDB
$sudo apt-get install mongodb
會自動安裝libpcrecpp0 libboost-system1.42.0 libboost-filesystem1.42.0
libboost-program-options1.42.0 libboost-thread1.42.0 xulrunner-2.0-mozjs
mongodb-clients mongodb-server mongodb-dev mongodb 等依賴包。
$ps aux | grep mongod
安裝Python語言驅動
$sudo apt-get install python-setuptools
$sudo easy_install pymongo
配置MongoDB
$sudo vim /etc/mongodb.conf
dbpath=’your datebase path’
logpath=’where to log’
logappend=true
bind_id=127.0.0.1
port=27017
使用Mongo測試資料庫
Mongo是用戶端,Mongod是服務端。下面使用Mongo測試下服務。
root@ubuntu:~# mongo
MongoDB shell version: 1.6.3
Mon Jun 27 19:15:05 *** warning: spider monkey build without utf8 support. consider rebuilding with utf8 support
connecting to: test
>
> db.serverStatus()
輸出參數為json格式有幾個主要的類型:
uptime: 伺服器已耗用時間(秒)
localTime: 伺服器本地時間
mem: 伺服器記憶體資訊
connections: 當前串連數
opcounters: 操作統計
查看所有資料庫:
> show dbs
admin
local
可以看出最初的時候只有 admin local test三個資料庫,test在使用,這裡沒有顯示出來。
切換資料庫
>use admin
switched to db admin
>db.stats()
使用WEB測試資料庫
訪問27017
根據要求再訪問 27017 + 1000 = 28017
可以看到一個很完整的管理頁面,顯然不如CouchDB的漂亮,呵呵。
完整測試建立資料庫
MongoDB沒有建立資料庫的命令,可以使用use dbname進行切換,use可以切換到不存在的資料庫,當有資料寫入的時候就會建立資料庫。
root@ubuntu:~# mongo
>use mytestdb
建立Collection
進入資料庫建立coolection資料庫才算建立完成。使用
db.createCollection("mytestdb ", {capped:true, size:10000}) 單位是kb
或者db.runCommand( {createCollection:" mytestdb ", capped:true, size:100000} )
capped參數是建立固定大小的資料庫檔案,為了保證效率,mongo會在建立collection的時候佔用磁碟空間,防止片段。
> db.createCollection("mytestdb ", {capped:true, size:10000})
> show collections
mytestdb
建立文檔
>db. mytestdb.insert({name:'xiaowanzi',age:8})
樣本查詢
操作符 |
SQL |
Mongo |
* |
Select * from mytestdb |
db.mytestdb.find() |
Column |
Select name,age from mytestdb |
db.mytestdb.find({},{name:1,age:1}) |
Where * |
Select * from mytestdb where age=24 |
db.mytestdb.find({age:24}) |
Column where |
Select name,age from mytestdb where age=24 |
db.mytestdb.find({age:24},{name:1,age:1}) |
>> |
Select * from mytestdb where age>20 |
db.mytestdb.find({‘age’:{>:20}}) |
Like |
Select * from mytestdb where name like ‘wang%’ |
db.mytestdb.find({name:/^wangfan/}) |
|
Select * from mytestdb where name like ‘%wang%’ |
db.mytestdb.find({name:/wangfan/}) |
Order |
SELECT * FROM mytestdb ORDER BY name DESC |
db.mytestdb.find().sort({name:-1}) |
> db.mytestdb.find()
{ "_id" : ObjectId("4e093ff90edf95f31cbc7c29"), "name" : "xiaowanzi", "age" : 8 }
建立索引
使用ensureIndex來建立索引
db. mytestdb.ensureIndex({name:1})
db.runCommand({dropIndexes:'foo', index : '*'})
這裡的1是正序,-1是倒序
刪除索引
db.collection.dropIndexes();刪除所有的索引
db. mytestdb.dropIndexes({name:1});
db.runCommand({dropIndexes:'wfcoll', index : {name:1}})
我們在name欄位做一個索引,在age上做個負索引,如下:
>db.mytestdb.ensureIndex({name:1})
>db.mytestdb.ensureIndex({age:-1})
使用Python測試
$python
>>> import pymongo
>>> conn = pymongo.Connection(host="localhost",port=27017)
>>> db=conn.mytestdb
>>> for user in db.wfcoll.find({}):
... repr(user)