标签: mgo

SASL身份验证步骤中服务器返回错误:身份验证失败

以下是GoLang的MongoDB连接拨号.但它正在返回一个恐慌" 服务器返回SASL身份验证步骤错误:身份验证失败. " 我的用户名,密码,hostAddrs和dbName都是正确的.我在这里错过了什么?

dbName: = os.Getenv("ENV_DBNAME")
userName: = os.Getenv("ENV_DBUSER")
password: = os.Getenv("ENV_DBPASS")
dbHost: = os.Getenv("ENV_DBHOST")
mongoDialInfo: = & mgo.DialInfo {
 Addrs: [] string {
  dbHost
 },
 Database: dbName,
 Username: userName,
 Password: password,
 Timeout: 60 * time.Second,
}
sess, err: = mgo.DialWithInfo(mongoDialInfo)
if (err != nil) {
 panic(err)

}
Run Code Online (Sandbox Code Playgroud)

authentication go mongodb mgo

59
推荐指数
3
解决办法
6万
查看次数

如何从下载源安装golang第三方项目?

我正在尝试安装mgo,这是一个用golang编写的mongo-driver.

标准命令:

go get launchpad.net/mgo
Run Code Online (Sandbox Code Playgroud)

但由于一些证书问题,它失败了.

所以我手动将mgo的源代码下载到本地E:\mgo,但我不知道如何安装它.

文件树:

??.bzr
?  ??branch
?  ?  ??lock
?  ??branch-lock
?  ??checkout
?  ?  ??lock
?  ??repository
?      ??indices
?      ??lock
?      ??obsolete_packs
?      ??packs
?      ??upload
??bson
??testdb
Run Code Online (Sandbox Code Playgroud)

我试过了:

cd mgo
go install
Run Code Online (Sandbox Code Playgroud)

它报告:

auth.go:34:2: import "launchpad.net/mgo/bson": cannot find package
Run Code Online (Sandbox Code Playgroud)

但是如果我首先尝试安装bson:

cd bson
go install
Run Code Online (Sandbox Code Playgroud)

它报告了另一个错误:

go install: no install location for _/E_/mgo/bson
Run Code Online (Sandbox Code Playgroud)

那么,安装它的正确命令是什么?

installation go mgo

43
推荐指数
3
解决办法
6万
查看次数

维持mgo会话的最佳做法

我目前正在使用带有mgo lib的mongodb进行Web应用程序,但我不确定我使用它的方式是不是很好..

package db

import (
    "gopkg.in/mgo.v2"
)

const (
    MongoServerAddr = "192.168.0.104"
    RedisServerAddr = "192.168.0.104"
)

var (
    MongoSession, err = mgo.Dial(MongoServerAddr)

    MDB  = MongoSession.DB("message")
    MCol = MDB.C("new")
    MSav = MDB.C("save")

    UDB  = MongoSession.DB("account")
    UCol = UDB.C("user")
)
Run Code Online (Sandbox Code Playgroud)

我初始化db会话并创建获取集合和文档值的变量,因此当我需要查询集合时,我使用变量来创建它.

像那样 :

func UserExist(username string) bool {
    user := Users{}
    err := db.UCol.Find(bson.M{"username": username}).One(&user)
    if err != nil {
        return false
    } else {
        return true
    }
}
Run Code Online (Sandbox Code Playgroud)

那么有最好的做法还是这个很好......?谢谢

database go mongodb mgo

26
推荐指数
1
解决办法
2万
查看次数

Golang/mgo:为什么mgo不返回插入文档的ID?

根据文档(http://godoc.org/launchpad.net/mgo/v2)如果您使用的Upsert方法,你可以得到你的"Upserted"文件的ID.

还有一个不提供此功能的Insert方法.
这是为什么?如果我想执行Insert而不是Upsert怎么办?(或者永远不会有任何正当理由想要这样做?我开始怀疑.)

go mongodb mgo

25
推荐指数
1
解决办法
1万
查看次数

在golang中清空或不需要的struct字段

我对像Go这样的类型语言有点新,我正在努力学习实现事物的最佳方法.

我有两个结构代表将插入mongodb数据库的模型.一个结构(投资)将另一个结构(组)作为其字段之一.

type Group struct {
    Base
    Name string `json:"name" bson"name"`
}

type Investment struct {
    Base
    Symbol string `json:"symbol" bson:"symbol" binding:"required"`
    Group  Group  `json:"group" bson:"group"`
    Fields bson.M `json:"fields" bson:"fields"`
}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,在投资模型中,不需要Group.如果没有组,我认为最好不要插入数据库.什么是在Go中处理这样的db模型的最佳方法?

go mgo

25
推荐指数
2
解决办法
3万
查看次数

使用带golang的mgo无法检索"_id"值

这是我的结构定义:

type Article struct {
    Id      bson.ObjectId `json:"id"        bson:"_id,omitempty"`
    Title   string        `json:"title"`
    Author  string        `json:"author"`
    Date    string        `json:"date"`
    Tags    string        `json:"tags"`
    Content string        `json:"content"`
    Status  string        `json:"status"`
}
Run Code Online (Sandbox Code Playgroud)

这是我从数据库中获取数据的方法:

func AllArticles() []Article {
    articles := []Article{}
    err := c_articles.Find(bson.M{}).All(&articles)
    if err != nil {
        panic(err)
    }

    return articles
}
Run Code Online (Sandbox Code Playgroud)

这是存储在数据库中的一个对象:

{ "_id" : ObjectId( "5281b83afbb7f35cb62d0834" ),
  "title" : "Hello1",
  "author" : "DYZ",
  "date" : "2013-11-10",
  "tags" : "abc",
  "content" : "This is another content.",
  "status" : "published" }
Run Code Online (Sandbox Code Playgroud)

这是打印结果:

[{ObjectIdHex("") …
Run Code Online (Sandbox Code Playgroud)

go mongodb mgo

21
推荐指数
3
解决办法
2万
查看次数

如何使用mgo从golang中的mongodb集合中选择所有记录

在MongoDB中执行类似db.mycollection.find()返回集合中所有文档的操作.

使用包labix.org/v2/mgo在GoLang工作时我做了例如:

query := db.C("client").Find();
Run Code Online (Sandbox Code Playgroud)

它抱怨它需要以界面的形式输入.我需要做的就是检索所有文档并迭代它们并显示每个文档.我该如何达到这个效果?我见过的所有例子似乎都有过滤器.

go mongodb bson mgo

21
推荐指数
1
解决办法
2万
查看次数

使用mgo的非结构化MongoDB集合

我是Go的新手.从我在mGo示例中看到的情况来看,为了查询集合然后从中读取,您必须预先定义将在结构中返回的数据.

type Person struct {
    ID        bson.ObjectId `bson:"_id,omitempty"`
    Name      string
    Phone     string
    Timestamp time.Time
}
Run Code Online (Sandbox Code Playgroud)

在PHP中,文档被分配给一个数组.这是完美的,因为一个记录可能有完全不同的密钥集(可能不包含名称或电话,但包含电子邮件),我可以直接访问它而无需设置预定义的类/结构/变量.

有没有办法在Go/mGo中做同样的事情?

go mgo

20
推荐指数
1
解决办法
1万
查看次数

Golang/mgo:我怎样才能让MongoDB在现场使用当前时间?

我有这个结构,匹配我正在使用的MongoDB集合的类型:

type AppInstance struct {
    Id bson.ObjectId "_id,omitempty"
    Url string
    Priority int
    LastSeen string
}
Run Code Online (Sandbox Code Playgroud)

我希望LastSeen字段能够保存上次与该特定应用程序交互的时间.因此,应用程序注册自己设置当前时间(作为字符串).

我想要的是Mongo在插入时动态设置自己当前的时间到该字段,就像MySQL的NOW()函数一样.

我有这个辅助功能:

func mongoNow() bson.JavaScript {
    return bson.JavaScript{Code: 
         "return (new Date()).ISODate('YYYY-MM-DD hh:mm:ss');"}
}
Run Code Online (Sandbox Code Playgroud)

我试过这个:

c := mongoSession.DB("myapp").C("instances")
rand.Seed(time.Now().UnixNano())
err := c.Insert(
   struct{Id, Serial, Priority, Url, LastSeen interface{}}{ 
      Id: bson.NewObjectId(), 
      Url: getInformedHost() + ":" + getRunningPortString(), 
      Priority: rand.Int(), 
      LastSeen: mongoNow() }
)
checkError(err, "Could not register on MongoDB server.", 3)
Run Code Online (Sandbox Code Playgroud)

LastSeen字段存储为脚本而不是评估:

[_id] => MongoId Object (
    [$id] => 502d6f984eaead30a134fa10
)
[id] => MongoId Object ( …
Run Code Online (Sandbox Code Playgroud)

go mongodb mgo

17
推荐指数
2
解决办法
2万
查看次数

使用mgo存储嵌套结构

我正在尝试从一个大量嵌套的go结构构建一个mongo文档,而且我遇到了从go结构转换为mongo对象的问题.我已经构建了一个非常简化的版本,我正在尝试使用它:http://play.golang.org/p/yPZW88deOa

package main

import (
    "os"
    "fmt"
    "encoding/json"
)

type Square struct {
    Length int 
    Width int
}

type Cube struct {
    Square
    Depth int
}

func main() {
    c := new(Cube)
    c.Length = 2
    c.Width = 3
    c.Depth = 4

    b, err := json.Marshal(c)
    if err != nil {
        panic(err)
    }

    fmt.Println(c)
    os.Stdout.Write(b)
}
Run Code Online (Sandbox Code Playgroud)

运行此命令会产生以下输出:

&{{2 3} 4}
{"Length":2,"Width":3,"Depth":4}
Run Code Online (Sandbox Code Playgroud)

这完全有道理.似乎Write函数或json.Marshal函数都有一些功能可以折叠嵌套结构,但是当我尝试使用mgo函数将这些数据插入mongo数据库时,我的问题出现了func (*Collection) Upsert(http://godoc.org/labix .org/v2/mgo#Collection.Upsert).如果我json.Marshal()首先使用该函数并将字节传递给collection.Upsert()它,它将存储为二进制文件,这是我不想要的,但如果我使用collection.Upsert(bson.M("_id": id, &c) …

go mongodb mgo

16
推荐指数
1
解决办法
6549
查看次数

标签 统计

go ×10

mgo ×10

mongodb ×7

authentication ×1

bson ×1

database ×1

installation ×1