如何使用来自mongodb的golang从json数组中获取嵌套值

时间:2015-02-23 10:37:26

标签: json mongodb go

我有以下json

我想根据Data从需求数组中提取特定Id的值。 如果"Data" = "String123"它应将“数据”显示为[“WED”]。

我试过这段代码

但无论Id如何,我都会得到所有值。

2 个答案:

答案 0 :(得分:0)

查询的结果是文档的集合。如果将组件集合存储在一个文档中,即使您在查询中使用组件字段,如果结果与过滤器匹配,结果仍将返回整个文档。

MongoDB支持选择您想要或不想要的属性,但您不能根据属性排除数组元素。
请注意,MongoDB仅支持返回数组的一部分($slice (projection)),但这是基于索引的,并不是您想要的。

您必须手动浏览所返回文档的组件(Eligibility)并搜索所需的组件。或者查看文档的内容,您应该将其拆分为将每个组件存储为单独的文档,然后您可以过滤它们并单独检索它们。

答案 1 :(得分:0)

如果我说得对,你在" clOfferMaster"收集并且您尝试从嵌套集合中获取数据"资格"。这可能不是处理数据的典型方式。

如果您按如下方式重组数据会怎样:

[ 
    {
        "ComponentId" : "SessionDayCheck",
        "ConfigData" : [ 
            "WED"
        ]
    }, 
    {
        "ComponentId" : "TransDayCheck",
        "ConfigData" : [ 
            "WED", 
            "THU"
        ]
    }, 
    {
        "ComponentId" : "SessionTransCheck",
        "ConfigData" : ""
    }
]

在这种情况下,您可以执行以下查询

c := session.DB("offerengine2").C("clOfferMaster")

var result struct {
    ConfigData []string "ConfigData"
}
err = c.Find(bson.M{"ComponentId": "SessionDayCheck"}).One(&result)
if err != nil {
    log.Fatal(err)
}

fmt.Println("Result:", result)
// Result: {[WED]}