mongodb - Golang mgo 获取空对象

标签 mongodb go struct mgo

我正在尝试学习 Go API 开发。我有一个在 Docker 容器中运行的 MongoDB 实例。我正在尝试遵循一些指南,但在简单查询时失败了。我不完全理解这里的 BSON 和 JSON 标签的使用。我知道这些术语的意思。所以这是我的代码。

import (
    "fmt"
    "time"

    "gopkg.in/mgo.v2/bson"
)

const (
    hosts      = "localhost:27017"
    database   = "my_database"
    username   = "dev1"
    password   = "password123"
    collection = "users"
)

type users struct {
    user string `bson:"user" json:"user"`
    data string
}

func main() {

    fmt.Println("Starting Application!")

    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)
    }
    defer session.Close()

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

    var user users
    var books []users
    var username = "cat"

    col.Insert(&users{user: "dog", data: "blah"})
    err3 := col.Find(bson.M{"user": username}).One(&user)
    fmt.Println(user)
    fmt.Println(err3)
    count, err2 := col.Count()
    if err2 != nil {
        panic(err2)
    }
    fmt.Println(fmt.Sprintf("Messages count: %d", count))

    fmt.Println(user)
    col.Find(bson.M{}).All(&books)
    fmt.Println(books)
}

基本上,我在打印行上得到的是空对象,但得到的是正确的消息计数。如果有帮助,我用 robomongo 插入了对象。

Objects in Collection

最佳答案

您必须导出结构的字段,否则它们会被 mgo 包忽略。将 users 的字段更改为 UserData

type users struct {
    User string `bson:"user" json:"user"`
    Data string `bson:"data" json:"data"` 
}

默认情况下,当从 MongoDB 转换/存储/检索结构值时,会使用字段名称。如果你想使用不同的名字,你可以使用 tags告诉字段应该映射到什么名称。

关于mongodb - Golang mgo 获取空对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45508642/

相关文章:

node.js - 无法访问 connect-mongo 的原型(prototype)函数

perl - 如何使用 Perl MongoDB 包在 Mongo 副本上进行 MapReduce

c++ - 在 C++ 中使用嵌套数组处理 MONGO 记录

go - 如何使用 WaitGroup 确保 goroutines 在 for 循环中完成?

c - 在 C 中初始化一个结构

将具有不同类型成员的结构复制到缓冲区

node.js - 文件中的多个 Mongoose 模式不起作用

go - 无法在go env中安装go 1.13。 goenv安装1.13.6失败--go-build:找不到定义:1.13.6

docker - 包 X 无法识别的导入路径 : import path does not begin with hostname

c - void * 到 C 中的 struct *