golang mgo得到空对象

cam*_*car 4 struct go mongodb mgo

我正在努力学习ap 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)
}
Run Code Online (Sandbox Code Playgroud)

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

集合中的对象

icz*_*cza 9

您必须导出结构的字段,否则它们将被mgo包忽略.更改usersUser和的字段Data.

type users struct {
    User string `bson:"user" json:"user"`
    Data string `bson:"data" json:"data"` 
}
Run Code Online (Sandbox Code Playgroud)

默认情况下,从MongoDB转换/存储/检索结构值时,将使用字段名称.如果要使用不同的名称,可以使用标记来指出字段应映射到的名称.

  • @camccar以大写字母开头的标识符将被导出,这意味着可以从所有包中访问它们.不以大写字母开头的标识符不会导出,只能从声明包中访问. (2认同)