如何在mGo中动态生成结果文档

时间:2016-02-02 09:45:14

标签: mongodb go mgo

我想从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
}    

我们的想法是拥有一个包含其他ChildAChildB文档的根文档。因此,示例文档可能如下所示:

{
    "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" ,. ..]"。)

1 个答案:

答案 0 :(得分:0)

首先,您的NestedObjects []*Parent是一片Parent,而不是孩子。

其次,目前尚不清楚您将如何区分您的孩子以及您对结果的期望,例如Collection.Find().One(?)

有关如何使用Unstructured MongoDB collections with mgo类型的好例子,可能需要阅读bson.*