如何处理从mongo中返回的任意哈希(使用mgo)?
我可以找到的所有引用构造一个结构来保存返回值,假设每个返回的记录具有相同的模式。 如果它们真的是文档并且除了可能的一些可查询的一致元数据属性之外没有一致的模式,我该如何处理该返回值?
例如:这个https://groups.google.com/forum/#!msg/mgo-users/KirqfCSlKFc/t2l3l4yxFRwJ假定您有一组时间戳。 如果它是一个数组,其中一些值是时间戳而一些是字符串呢?
在ruby中,我只是将整个返回的记录视为任意哈希并按键处理它。 我该怎么办呢?
您可以使用通用地图,例如:
var result map[string]interface{} err := collection.Find(query).One(&result)
你会发现人们使用bson.M
,它也是一个具有相同底层类型的地图。 bson.M
, bson.M
没有什么特别之处。 它只是地图的简短名称。 您可以创建自己的方便名称,也可以使用上面示例中的普通地图。
在没有定义模式的情况下访问文档的另一种方法是使用bson.D
代替上面的地图类型。 当文档中元素的顺序相关时,或者如果你想稍微减少操作开销时, bson.D
最有用(由于它们的性质,映射处理起来要贵一些)。 bson.D
类型是具有键/值对的结构值的切片。 与bson.M
不同, bson.D
是特殊的,由bson.D
/ bson包内部处理。