golang的mgo庫帶賬號密碼連接mongodb
1.找了一圈,發現很少mgo帶賬號密碼登錄連接mongodb的文章,逐記錄一下。
2.解決golang連接Mongodb是的server returned error on SASL authentication step: Authentication failed 錯誤
上代碼
// mongodbAuth project main.go
package main
import (
"fmt"
"os"
"gopkg.in/mgo.v2"
)
func main() {
fmt.Println("Hello World!")
session := InitMongoSession()
myDB := session.DB("config")
collects, err := myDB.CollectionNames()
if err != nil {
fmt.Println("CollectionNames-error:", err)
os.Exit(0)
}
fmt.Println(collects)
}
func InitMongoSession() *mgo.Session {
mHost := "127.0.0.1"
mPort := "27017"
//mDBName := "config" //你要連接的表,也可以後面再選,都行
mUsername := "admin" //mongodb的賬號
mPassword := "12345" //mongodb的密碼
session, err := mgo.Dial(mHost + ":" + mPort)
if err != nil {
fmt.Println("mgo.Dial-error:", err)
os.Exit(0)
}
session.SetMode(mgo.Eventual, true)
myDB := session.DB("admin") //這裏的關鍵是連接mongodb後,選擇admin數據庫,然後登錄,確保賬號密碼無誤之後,該連接就一直能用了
//出現server returned error on SASL authentication step: Authentication failed. 這個錯也是因爲沒有在admin數據庫下登錄
err = myDB.Login(mUsername, mPassword)
if err != nil {
fmt.Println("Login-error:", err)
os.Exit(0)
}
//myDB = session.DB(mDBName) //如果要在這裏就選擇數據庫,這個myDB可以定義爲全局變量
session.SetPoolLimit(10)
return session
}