如何将带有map属性的基于struct的类型保存到mongodb中

时间:2015-03-05 12:33:00

标签: go mgo

我想使用mongodb作为会话存储,并将基于结构的数据类型保存到mongodb中。

The struct type looks like:

type Session struct {
    Id  string
    Data map[string]interface{}
}

创建对Session结构类型的引用,并将一些数据放入以下属性中:

type Authen struct {
    Name, Email string
}
a := &Authen{Name: "Foo", Email: "foo@example.com"}

s := &Session{}
s.Id = "555555"
s.Data["logged"] = a

如何将会话数据s保存到mongodb以及如何查询这些数据并再次保存到引用中? 我认为问题可能发生在map[string]interface{}类型的数据属性上。

作为mongodb的驱动程序,我会使用mgo

1 个答案:

答案 0 :(得分:3)

插入没有什么特别之处。只需像往常一样将该会话值插入数据库,并正确插入地图类型:

err := collection.Insert(&session)

假设描述的结构,这将把以下文档插入数据库:

{id: "555555", data: {logged: {name: "foo", email: "foo@example.com"}}}

你不能轻易地像这样查询它,因为map[string]interface{}没有给bson包提供关于值类型是什么的好提示(它最终将作为地图,而不是Authen)。要解决此问题,您需要在Data字段使用的类型中实现bson.Setter界面。