【发布时间】:2017-08-04 13:52:53
【问题描述】:
我正在尝试学习 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 插入对象。
【问题讨论】:
-
你只插入了
"dog",你怎么能找到"cat"?我的意思是它“可能”已经存在,但是作为一个自包含的示例,您的代码似乎自相矛盾,并且正在寻找与您实际插入的内容不同的东西。因此,如果您正在写入正确的来源,那么"dog"在哪里?这不应该表明您实际上是在写信到不同的地方吗? -
好问题。我已经插入了猫。我尝试插入 dog,然后阅读所有内容以查看 mgo 的插入是否与 robomongo 不同。但是狗甚至没有被插入。查看我附上的图片。