2016-09-26 90 views
1

我在创建应用程序的过程中,我的后端处于lang并且数据库是mongoDB。我的问题是,我有我的结构映射声明如下需要帮助,以使用golang在我的mongodb数据库中存储类型接口的地图

Data struct { 
     data map[interface{}]interface{} 
} 

c.Insert(&data) 

在增加值,这就像

var data Data 
    data["us"]="country" 
    data[2]="number" 
    data["mother"]="son" 

余米将其插入后,当我插入此即时通讯失去我的密钥,只能看到值...

{ 
    "_id" : Object Id("57e8d9048c1c6f751ccfaf50"), 
    "data" : { 
     "<interface {} Value>" : "country", 
     "<interface {} Value>" : "number", 
     "<interface {} Value>" : "son" 
    }, 

} 

我可以通过任何方式使用接口,并在我的mongoDB中获得键和值。谢谢....

+0

你在地图上的键是'string'吧?使用'map [string] interface {}'。或者,如果你确定数据类型(即你的值总是字符串,只需使用'map [string] string') – KBN

回答

1

你只能使用string作为MongoDB文档中的关键字。即使你将Data结构定义为map[int]interface{} Mongo(不知道mgo是否会转换类型)将不允许您将此对象插入到数据库中。实际上,除了string之外,您完全可以使用JSON密钥,因为这不会是JSON(请在您的浏览器控制台中尝试下一个代码JSON.parse('{2:"number"}'))。

所以定义为Databson.M(快捷键map[string]interface{}),并使用strconv包到您的数字转换成字符串。

但我想你必须看看数组/切片,因为只有一个原因,为什么有人可能需要有数字作为JSON中的键,这是将来通过这些字段的迭代。对于迭代我们使用数组。

更新:刚才检查了如何mgo处理map[int]interface{}。它插入数据库条目,如{"<int Value>" : "hello"}。其中<int Value>不是数字,而是实际上string <int Value>

+0

谢谢.....救了我的一天.... –