MongoDB 安裝配置
MongoDB 是一個高性能,開源,無模式的文檔型數據庫,采用C++開發,是當前NoSQL數據庫中比較熱門的一種,在許多場景下可用于替代傳統的關系型數據庫或鍵/值存儲方式
MongoDB使用BSON作為數據存儲和傳輸的格式,BSON是一種類似JSON的二進制序列化文檔,支持嵌套對象和數組。MongoDB很像MySQL,document對應MySQL的row,collection對應MySQL的table
MongoDB服務端可運行在Linux、Windows或OS X平臺,支持32位和64位應用,默認端口為27017。推薦運行在64位平臺,因為MongoDB在32位模式運行時支持的最大文件尺寸為2GB
1,特點和功能
1) 特點
- 高性能、易部署、易使用,存儲數據非常方便。
- 面向集合存儲,易存儲對象類型的數據,模式自由。
- 支持動態查詢,支持完全索引,包含內部對象。
- 支持復制和故障恢復。
- 使用高效的二進制數據存儲,包括大型對象(如視頻等)。
- 自動處理碎片,以支持云計算層次的擴展性
- 支持Python,PHP,Ruby,Java,C,C#,Javascript,Perl及C++語言的驅動程序,社區中也提供了對Erlang及.NET等平臺的驅動程序。
- 文件存儲格式為BSON(一種JSON的擴展),可通過網絡訪問。 </ul>
- 面向集合的存儲:適合存儲對象及JSON形式的數據。
- 動態查詢:Mongo支持豐富的查詢表達式。查詢指令使用JSON形式的標記,可輕易查詢文檔中內嵌的對象及數組。
- 完整的索引支持:包括文檔內嵌對象及數組。Mongo的查詢優化器會分析查詢表達式,并生成一個高效的查詢計劃。
- 查詢監視:Mongo包含一個監視工具用于分析數據庫操作的性能。
- 復制及自動故障轉移:Mongo數據庫支持服務器之間的數據復制,支持主-從模式及服務器之間的相互復制。復制的主要目標是提供冗余及自動故障轉移。
- 高效的傳統存儲方式:支持二進制數據及大型對象(如照片或圖片)
- 自動分片以支持云級別的伸縮性:自動分片功能支持水平的數據庫集群,可動態添加額外的機器。 </ul>
- 網站數據:Mongo非常適合實時的插入,更新與查詢,并具備網站實時數據存儲所需的復制及高度伸縮性。
- 緩存:由于性能很高,Mongo也適合作為信息基礎設施的緩存層。在系統重啟之后,由Mongo搭建的持久化緩存層可以避免下層的數據源 過載。
- 大尺寸,低價值的數據:使用傳統的關系型數據庫存儲一些數據時可能會比較昂貴,在此之前,很多時候程序員往往會選擇傳統的文件進行存儲。
- 高伸縮性的場景:Mongo非常適合由數十或數百臺服務器組成的數據庫。Mongo的路線圖中已經包含對MapReduce引擎的內置支持。
- 用于對象及JSON數據的存儲:Mongo的BSON數據格式非常適合文檔化格式的存儲及查詢。 </ol>
2) 功能
2, 適用場合
3, 下載安裝
mongoDB 下載, 最新版本 mongodb-linux-x86_64-2.2.3.tgz
mongoDB 安裝:
tar zxvf mongodb-linux-x86_64-2.2.3.tgz
cd mongodb-linux-x86_64-2.2.3
sudo mkdir /opt/mongodb-2.2.3
sudo ./bin/mongod --dbpath=/opt/mongodb-2.2.3/
安裝完畢后,在瀏覽器URL欄輸入: http://localhost:27017/,出現下面內容則表示安裝成功!

上圖,提示端口號加上1000,然后通過HTTP訪問,于是在瀏覽器地址欄輸入:http://localhost:28017,訪問界面如下:

4, 啟動關閉
1) 默認啟動
sudo ./bin/mongod (默認保存文件目錄為/data/db/, 沒有則新建 sudo mkdir -p /data/db/, 默認端口為27017)
2)指定目錄啟動
sudo ./bin/mongod --dbpath=/opt/mongodb-2.2.3/ (保存文件目錄為/opt/mongodb-2.2.3/ , 沒有則新建)
3) 指定端口啟動
sudo ./bin/mongod --dbpath=/opt/mongodb-2.2.3/ -p 27000 (端口修改為指定27000),啟動輸出如下:
MongoDB starting : pid=4222 port=27000 dbpath=/opt/mongodb-2.2.3/ 32-bit host=ubuntu
mongodb.conf配置文件啟動:
homer@ubuntu:~$ cat /opt/mongodb/mongodb.conf
port=27017
dbpath=/opt/mongodb/data/
logpath=/opt/mongodb/log/mongodb.log
logappend=true
啟動命令:
/opt/mongodb/bin/mongod -f /opt/mongodb/mongodb.conf &
4) 后臺啟動命令
sudo ./bin/mongod -shardsvr -replSet shard1 -port=27017 -dbpath=/opt/mongodb-2.2.3/ -logpath=/opt/mongodb-2.2.3/log -logappend -rest -fork
5) 后臺關閉命令
或者
> db.adminCommand({shutdown : 1, force : true})
> //or
> db.shutdownServer({force : true})
> db.adminCommand(shutdown : 1, force : true, timeoutsec : 5) // 超時關閉
> //or
> db.shutdownServer({force : true, timeoutsec : 5})
6) 客戶端啟動
默認啟動: ./bin/mongo
指定端口啟動: ./bin/mongo --port 27000
7) 備份與恢復
$ sudo ./bin/mongodump -d foo -o /opt/mongodb-2.2.3/bk/ // 備份到bk目錄
connected to: 127.0.0.1
Tue Feb 5 20:58:13 DATABASE: foo to /opt/mongodb-2.2.3/bk/foo
Tue Feb 5 20:58:13 foo.foo_test to /opt/mongodb-2.2.3/bk/foo/foo_test.bson
Tue Feb 5 20:58:13 1 objects
Tue Feb 5 20:58:13 Metadata for foo.foo_test to /opt/mongodb-2.2.3/bk/foo/foo_test.metadata.json
$ ./bin/mongorestore -d foo -c foo_test /opt/mongodb-2.2.3/bk/foo/foo_test.bson // 恢復foo_test集合
connected to: 127.0.0.1
Tue Feb 5 20:58:20 /opt/mongodb-2.2.3/bk/foo/foo_test.bson
Tue Feb 5 20:58:20 going into namespace [foo.foo_test]
Tue Feb 5 20:58:20 warning: Restoring to foo.foo_test without dropping. Restored data will be inserted without raising errors; check your server log
Tue Feb 5 20:58:20 WARNING: collection foo.foo_test exists with different options than are in the metadata.json file and not using --drop. Options in the metadata file will be ignored.
1 objects found
Tue Feb 5 20:58:20 Creating index: { key: { _id: 1 }, ns: "foo.foo_test", name: "_id_" }
5, 命令示例
1) 啟動服務端
sudo ./bin/mongod --dbpath=/opt/mongodb-2.2.3/
2) 啟動客戶端
./bin/mongo
3) 客戶端簡單命令
幫助: help
顯示數據庫: show dbs;
選擇數據庫: use test;
插入數據: db.foo.save({homer:2});
查詢: db.foo.find();
結果: { "_id" : ObjectId("511078ad857b699e9eaaf516"), "homer" : 2 }
更新: db.foo.update({"homer":2},{"homer":3}); // ( {}, {} ) 第一個{}是查詢條件,第二個{}是重新賦值
結果: { "_id" : ObjectId("511078ad857b699e9eaaf516"), "homer" : 3 }
刪除: db.foo.remove({"homer":3});
復合插入:
> t={"homer":2, "name" : {"name1" : "yang", "name2" : "gang"} }
{ "homer" : 2, "name" : { "name1" : "yang", "name2" : "gang" } }
> db.foo.insert(t);
> db.foo.find();
{ "_id" : ObjectId("5110d3e0af69ad089b234001"), "homer" : 2, "name" : { "name1" : "yang", "name2" : "gang" } }
復合查詢:
> db.foo.find(); // 先查看集合中所有記錄
{ "_id" : ObjectId("5110ca1aaf69ad089b233fff"), "homer" : 222 }
{ "_id" : ObjectId("5110caffaf69ad089b234000"), "homer" : 222 }
{ "_id" : ObjectId("5110d3e0af69ad089b234001"), "homer" : 2, "name" : { "name1" : "yang", "name2" : "gang" } }
>
> db.foo.find({"homer":2}); // 查詢包含特定內容的記錄
{ "_id" : ObjectId("5110d3e0af69ad089b234001"), "homer" : 2, "name" : { "name1" : "yang", "name2" : "gang" } }
MongoDB 創建示例:
MongoDB 刪除示例:
MongoDB 索引
> db.foo.find()
{ "_id" : ObjectId("5110ca1aaf69ad089b233fff"), "homer" : 222 }
{ "_id" : ObjectId("5110caffaf69ad089b234000"), "homer" : 222 }
{ "_id" : ObjectId("5110d3e0af69ad089b234001"), "homer" : 2, "name" : { "name1" : "yang", "name2" : "gang" } }
> db.foo.getIndexes() // 查看索引(_id為默認,不可刪除和修改)
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"ns" : "test.foo",
"name" : "_id_"
}
]
> db.foo.ensureIndex({"homer":1}) // 新建索引
> db.foo.getIndexes() // 驗證新建索引
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"ns" : "test.foo",
"name" : "_id_"
},
{
"v" : 1,
"key" : {
"homer" : 1
},
"ns" : "test.foo",
"name" : "homer_1"
}
]
> db.foo.dropIndex({"homer":1}) // 刪除索引
{ "nIndexesWas" : 2, "ok" : 1 }
> db.foo.getIndexes() // 驗證刪除索引
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"ns" : "test.foo",
"name" : "_id_"
}
]
6, 應用示例