我想从mongoDB加载和转换一个结构,其中包含一些可以嵌套它们的不同文档类型。我们假设我们有三种不同的结构类型,一个父母和两个孩子
type Parent struct {
ID bson.ObjectId `bson:"_id,omitempty`
Title string
Description string
NestedObjects []*Parent
}
type ChildA struct {
Parent
DateFrom time.Time
DateTo time.Time
}
type ChildB struct {
Parent
Options []string
}
我们的想法是拥有一个包含其他ChildA
或ChildB
文档的根文档。因此,示例文档可能如下所示:
{
"Title": "test event",
"Description": "description goes here",
"NestedObjects": [
{
"Title": "test event",
"Description": "description goes here",
"NestedObjects": [],
"Options": ["foo", "bar"]
}
],
DateFrom: ISODate(...),
DateTo: ISODate(...)
}
我现在如何将它们动态地转换为结构(正确类型)?根文档属于类型ChildA
,并且是第一个类型为ChildB
的嵌套文档。我想要的结果是某种静态类型[]Parent
,它可以动态地转换为子类型,不知何故,像这样(伪代码)
for _ ele := range results {
if ele typeof ChildA {
...
}
if ele typeof ChildB {
...
}
}
(仅仅是为了解释一下:我想建立像待办事项列表,民意调查以及其他可以互相包含的其他事件。所以就像一个事件" Netflix& chill"可以有民意调查和待办事项例如:ToDos:"购买爆米花","决定观看哪部电影 - > [投票:" Jurassic Park"," Inception" ,. ..]"。)
答案 0 :(得分:0)
首先,您的NestedObjects []*Parent
是一片Parent
,而不是孩子。
其次,目前尚不清楚您将如何区分您的孩子以及您对结果的期望,例如Collection.Find().One(?)
有关如何使用Unstructured MongoDB collections with mgo类型的好例子,可能需要阅读bson.*。