为什么在终端模式下找不到IDE插入的数据?

时间:2019-09-19 02:12:58

标签: mongodb go goland mongo-go

我试图通过Gogo IDE在MongoDB中插入数据。尽管连接正确,并且在IDE输出中我获得了ObjectID,但仍然无法直接从终端查看结果。看来数据库记录了没有任何信息的新文档...

OSX,MongoDB是默认设置。驱动程序为“ go.mongodb.org/mongo-driver”,连接正确。戈兰(Goland)在2019.2.2

// go

type Student struct {
    name string
    sex string
}

newStu := Student{
    name: "Alice",
    sex: "Female",
}

collection := client.Database("mgo_1").Collection("student")

insertResult, err := collection.InsertOne(context.TODO(), newStu)

if err != nil {
   log.Fatal(err)
    }

fmt.Println(insertResult.InsertedID)

这是插入部分,我遵循了mongodb.com上的指南

> db.student.find()
{ "_id" : ObjectId("5d82d826f5e2f29823900275"), "name" : "Michael", "sex" : "Male" }
{ "_id" : ObjectId("5d82d845b8db68b150894f5a") }
{ "_id" : ObjectId("5d82dc2952c638d0970e9356") }
{ "_id" : ObjectId("5d82dcde8cf407b2fb5649e7") }

这是我在另一个终端中查询的结果。除了第一个具有某些内容的内容外,其他三个是我尝试通过Goland插入数据库三次的内容。

1 个答案:

答案 0 :(得分:0)

所以您的结构看起来像这样:

type Student struct {
    name string
    sex string
}

namesex字段不是以大写字母开头,因此它们不会被导出,因此对反射不可见。 InsertOne无疑使用反射来找出newStu中的内容,但是Student结构没有导出的字段,因此InsertOne根本看不到newStu中的任何字段

如果您将结构修复为具有导出字段,则:

type Student struct {
    Name string
    Sex string
}

然后InsertOne将能够找出其中的内容。 MongoDB界面应自行计算从Name(转到)到name(MongoDB)以及从Sexsex的映射。