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
- 驅動會檢查連接到的複製組和這個名稱是否匹配。意味着如果給出的主機是種子列表,驅動會嘗試找到複製組內所有成員。
單臺服務器:
- slaveOk=true|false
任何配置下:
- 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
- 同步到日誌文件。意味着fase=true.
- 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的配置中。