問題一: 在ApplyUR函數中填寫參數時,頭幾次填寫爲空時還報錯,調試一久返回client不爲空,err爲空(至今很迷惑)
var mgoDB *mongo.Database
func Connect() {
ctx, _ := context.WithTimeout(context.Background(), 2*time.Second)
opt := options.Client().ApplyURI(viper.GetString("mongo.addrs"))
if client, err := mongo.Connect(ctx, opt); err != nil {
panic(err)
} else {
ctx2, _ := context.WithTimeout(context.Background(), 2*time.Second)
err := client.Ping(ctx2, readpref.Primary())
if err != nil {
panic(err)
}
mgoDB = client.Database(viper.GetString("mongo.db"))
}
}
以上代碼主要意思是:獲取配置中參數連接mongodb然後通過ping來檢查是否此client有效
問題二:爲什麼這麼做?(這也是我現在不得已的做法)
由於問題一中url無論填什麼它都不返回錯誤(後來查出問題是因爲它默認連接了本地的127.0.0.1:27017 我本身是連接的遠端),後來關閉本地服務err還是返回了
後來又碰到mongo的權限的問題,它不會通過連接來返回(connect返回的err)
意思是:無論url填密碼登陸還是無密碼
登陸都不會拋出錯誤(我在navicat中看到的是無密碼可以連接但是沒有庫,有密碼正常)
mongodb://用戶名:密碼@地址:27017
也就是說我操作的這個mongo官方包鑑權是方面可能存在不足,於是通過ping操作來判斷該連接是否有效