Mongodb是一個資料庫伺服器:它運行在前台或者後台,等待來自使用者的串連。當你啟動mongodb,你會看到類似於下面的內容:
~/$ ./mongod
#
# some logging output
#
Tue Mar 9 11:15:43 waiting for connections on port 27017
Tue Mar 9 11:15:43 web admin interface listening on port 28017
此時它會停止列印輸出但是並沒有凍結,它只是監聽在連接埠27017等待串連。一旦你串連並開始發送命令,它會繼續輸出所作事情的log。你可以使用任何一個mongodb驅動或者mongo shell去串連到資料庫。
你不能通過在網頁瀏覽器上輸入http://localhost:27017來串連到mongodb。資料庫不能在連接埠27017上面使用HTTP訪問。
標準的連接字串格式
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
- mongodb:// 必選的首碼,用來標示這是一個標準串連格式的字串
- username:password@ 可選的。如果有,驅動在串連到資料庫伺服器後會嘗試登入到一個資料庫。
- host1 URL的必選部分。它標示了要已連線的服務器地址。
- :portX 是可選的。如果沒有提供預設串連到:27017.
- /database 要登入的資料庫的名稱,只有username:password@文法使用後它才有用。如果沒有提供,預設使用“admin”。
- ?options 是串連的可選項。注意如果database沒有提供,在最後一個主機和?符號中間依然需要一個斜杠"/"。可選項是名稱=值的配對,他們使用"&"或者";"隔開。
很多主機可能需要指定(串連到複製對/組)。
這些可選項是:
複製組:
- replicaSet=name
- 驅動會檢查串連到的複製組和這個名稱是否匹配。意味著如果給出的主機是種子列表,驅動會嘗試找到複製組內所有成員。
單台伺服器:
任何配置下:
- safe=true|false
- true:驅動在執行更新操作後會發送一個getLastError命令確保更新成功(同時查看一下w和wtimeoutMS)。
- false:驅動在每次更新操作後不會發送getLastError命令。
- w=n
- 驅動在getLastError命令中增加{w:n}。意味著safe=true.
- wtimeoutMS=ms
- 驅動在getLastError命令中增加{wtimeout:ms}。意味著safe=true.
- fsync=true|false
- true:驅動在getLastError命令中增加{fsync:true}。意味著safe=true.
- false:驅動不在getLastError命令中增加同步參數。
- journal=true|false
- connectTimeoutMS=ms
- socketTimeoutMS=ms
這些可選項對大小寫不敏感。
一些例子
串連到運行在本機監聽預設連接埠的資料庫伺服器:
mongodb://localhost
使用使用者名稱“fred”和密碼“foobar”串連並登陸到管理資料庫:
mongodb://fred:foobar@localhost
使用使用者名稱“fred”和密碼“foobar”串連並登陸到“baz”資料庫:
mongodb://fred:foobar@localhost/baz
串連到一個複製配對,其中一台伺服器在example1.com另一台伺服器在example2.com:
mongodb://example1.com:27017,example2.com:27017
串連到一個複製組,三台伺服器運行在本地(連接埠為27017,27018,27019):
mongodb://localhost,localhost:27018,localhost:27019
串連到一個三台伺服器組成的複製組,將所有寫操作發送給主節點,分發所有讀操作到從節點:
mongodb://host1,host2,host3/?slaveOk=true
使用安全模式串連到本機:
mongodb://localhost/?safe=true
使用安全模式串連到複製組,等待覆制操作至少在2台機器完成,2秒逾時:
mongodb://host1,host2,host3/?safe=true;w=2;wtimeoutMS=2000
串連池
伺服器會為每一個TCP串連啟動一個線程,強烈推薦你的應用程式使用某種類型的串連池。幸運的是,大部分驅動的都為你實現了這個功能。當你的應用程式為每個請求啟動一個進程時,驅動會拋出一個重要的異常,比如在CGI和一些PHP的配置中。