小编典典

如何处理go中从mongo返回的任意哈希(使用mgo)?

go

我可以找到的所有引用都构造一个结构来保存返回值,假设每个返回的记录都具有相同的架构。如果它们确实是文档,并且除了几个可查询的一致元数据属性外没有其他一致的架构,那么该如何处理该返回值?

例如:此https://groups.google.com/forum/#!msg/mgo-
users/KirqfCSlKFc/t2l3l4yxFRwJ假设您有一组时间戳记。如果它是一个数组,其中某些值是时间戳,有些是字符串,该怎么办?

在ruby中,我只是将整个返回的记录视为任意哈希,然后逐个密钥地对其进行处理。我该怎么办?


阅读 227

收藏
2020-07-02

共1个答案

小编典典

您可以使用通用映射,例如:

var result map[string]interface{}
err := collection.Find(query).One(&result)

您会发现使用的人bson.M,这也是具有相同基础类型的地图。不过bson.M,没有什么特别的。它只是地图的简称和便捷名称。您可以创建自己的方便名称,也可以使用上面的示例中的普通地图。

在没有定义架构的情况下访问文档的另一种方法是bson.D代替上面的地图类型。bson.D当文档中的元素顺序相关时,或者如果您想稍微减少操作开销(由于地图的性质,处理地图会稍微贵一些)时,此功能最有用。该bson.D类型是带有键/值对的结构值的一部分。与不同bson.M,它bson.D是特殊的,并由mgo
/ bson软件包内部处理。

2020-07-02