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連接埠。一旦你串連到資料庫並開始發送命令,它將繼續輸出正執行的操作。你可以使用任何一種MongoDB的 驅動 或是 Mongo
shell 來串連到資料庫。
但你_不能_通過瀏覽器訪問27017連接埠 http://localhost:27017。資料庫不接受HTTP方式訪問該連接埠。
標準連接字串格式
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
- mongodb:// 是一個必填的首碼,它標識當前字串是標準串連格式。
- {{username:password@}}可選。給出使用者名稱和密碼後,驅動將在串連到資料庫後嘗試登入。
- host1 uri裡唯一的必填項,資料庫的串連地址。
- :portX 可選。預設串連到27017連接埠。
- /database 是希望串連到的資料庫名,只有在提供 username:password@ 後該值才有效。如果不指定,預設將串連"admin"資料庫。
可以任意指定多個資料庫和連接埠,這用於實現串連到replica pairs/sets。
可選項有:
- connect=direct|replicaset
- direct: 直接建立一個到伺服器的串連。如果指定了多個host,將按先後順序挨個嘗試建立串連,直到串連建立成功為止。如果只指定了一個host,則 direct 為預設值。
- replicaset: 使用creplica set semantics建立串連(即使只提供了一個host)。指定的host作為種子列表來尋找完整的replica set。當指定多個host時 replicaset 為預設值。
- replicaset=name
- 驅動驗證建立串連的replica set的名字。隱含 connect=replicaset。
- slaveok=true|false
- true: 對於 connect=direct 模式,驅動對列表中的第一個伺服器建立串連,即使它不是主伺服器。對 connect=replicaset 模式,驅動將所有寫操作發送到主節點,將所有讀操作按round
robin順序分發到從節點。
- false: 對 connect=direct 模式,驅動按順序嘗試所有host直到找到主節點。對 connect=replicaset 模式,驅動將只串連到主節點,並將所有讀操作和寫操作都發送到主節點。
- safe=true|false
- true: 驅動在每次更新操作後都發送 getlasterror 命令以確保更新成功(參考 w 和 wtimeout)。
- false: 驅動每次更新操作後不發送 getlasterror 命令。
- w=n
- 驅動給 getlasterror 發送 { w : n } 命令。隱含 safe=true。
- wtimeout=ms
- 驅動給 getlasterror 添加 { wtimeout : ms } 參數。隱含 safe=true。
- fsync=true|false
- true: 驅動給 getlasterror 添加 { fsync : true } 參數。隱含 safe=true。
- false: 驅動不添加 fsync 參數。
樣本
串連到一個運行在本機預設連接埠(27017)的MongoDB
mongodb://localhost
串連到一個運行在本機預設連接埠(27017)的MongoDB,並以使用者名稱"fred"和密碼"foobar"登入,登入後將預設使用admin資料庫
mongodb://fred:foobar@localhost
串連到一個運行在本機預設連接埠(27017)的MongoDB,並以使用者名稱"fred"和密碼"foobar"登入,登入後將使用baz資料庫
mongodb://fred:foobar@localhost/baz
串連到一個replica pair,一台伺服器在example1.com,另一台在example2.com
mongodb://example1.com:27017,example2.com:27017
串連到原生一個replica set(連接埠分別為27017,27018,27019)
mongodb://localhost,localhost:27018,localhost:27019
串連到三台伺服器的replica set,將所有寫操作發送到主節點,所有讀操作分發到從節點
mongodb://host1,host2,host3/?slaveok=true
串連到第一台伺服器並響應,無論它是replica set的一台,也無論它是主節點還是從節點
mongodb://host1,host2,host3/?connect=direct;slaveok=true
註:這種類型的連接字串可用於在你偏好使用某台伺服器但有可供替換的伺服器的時候。
使用safe模式串連到本機
mongodb://localhost/?safe=true
使用safe模式串連到replica set,等待備份在至少兩台機器上完成,timeout時間為2秒
mongodb://host1,host2,host3/?safe=true;w=2;wtimeout=2000
串連池
每個TCP串連將對應一個資料庫線程。因此強烈建議你使用某種形式的串連池技術。幸運的是,大部分官方資料庫驅動已經內建實現了這個功能。但如果你使用CGI或是PHP,對應每個新的請求可能啟動一個新的應用進程,這種情況下需要特別注意串連的處理。