如何在Golang中连接MongoDB 3.0

5
当我将我的 mongodb 服务器从版本 2.6 升级到版本 3.0 后,使用 mgo 在 golang 中无法连接。
我在连接字符串中添加了 'authMechanism=SCRAM-SHA-1',但仍然无法连接到服务器。我收到的错误是 SASL support not enabled during build (-tags sasl)

那么这是运行时错误还是编译器错误? - evanmcdonnal
运行时错误,在我重新安装了MongoDB服务器后,问题解决了。 - William
删除mgo包并使用“-tags sasl”选项重新获取,这将解决您当前的问题。您可能需要libsasl2-dev来创建新的包。 go get -tags sasl labix.org/v2/mgo 但是!!!之后我得到了 cannot establish SASL session: SASL(-4): no mechanism available: No worthy mechs found 如果您找到了解决方法,请告诉我。 - Jiang YD
在我的系统上安装了更多的软件包后,客户端出现了新的错误消息:“因为:服务器在SASL身份验证步骤上返回了错误:身份验证失败。”而服务器则显示“AuthenticationFailed SCRAM-SHA-1身份验证失败,storedKey不匹配”。 - Jiang YD
2个回答

3
我曾遇到类似问题。在网络上找到的信息误导了我,声称需要包含“labix.org/v2/mgo”包,尽管在官方网站http://labix.org/mgo(阅读时)上有更新的信息,指向至少对我有效的包“gopkg.in/mgo.v2”。
希望这可以帮到您,因为我也曾经历了与您相同的步骤但没有成功,后来我更改了包的引用。这段代码在我的案例中起作用:
  package main

  import (
    "fmt"
    "time"

    "gopkg.in/mgo.v2"
  )

  //const MongoDb details
  const (
    hosts      = "ds026491.mongolab.com:26491"
    database   = "messagingdb"
    username   = "admin"
    password   = "youPassword"
    collection = "messages"
  )

  func main() {

    info := &mgo.DialInfo{
        Addrs:    []string{hosts},
        Timeout:  60 * time.Second,
        Database: database,
        Username: username,
        Password: password,
    }

    session, err1 := mgo.DialWithInfo(info)
    if err1 != nil {
        panic(err1)
    }

    col := session.DB(database).C(collection)

    count, err2 := col.Count()
    if err2 != nil {
        panic(err2)
    }
    fmt.Println(fmt.Sprintf("Messages count: %d", count))
  }

这也可以在Github上找到。


这对我没有任何帮助。在使用DialWithInfo时仍然出现身份验证失败的问题。我已确认我的所有信息都是正确的,因为我能够通过另一个客户端连接到数据库。注:我正在使用Go1.7.1。 - Gimli

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接