gpt4 book ai didi

mongodb - Golang 从 MongoDB 的嵌套 json 数据映射中找到一个值

转载 作者:数据小太阳 更新时间:2023-10-29 03:14:50 27 4
gpt4 key购买 nike

我正在尝试在 []map[string]interface{} 类型的映射中使用 MGO 从我的 MongoDB 接收数据

我的 JSON 看起来像这样 -

{
"_id":"string",
"brandId":123,
"category":{
"television":[
{
"cat":"T1",
"subCategory":[
{
"subCat":"T1A TV",
"warrantyPeriod":6
}
],
"warrantyPeriod":12
},
{
"cat":"T2",
"subCategory":[
{
"subCat":"T2A",
"warrantyPeriod":18
},
{
"subCat":"T2B",
"warrantyPeriod":9
}
],
"warrantyPeriod":15
},
{
"cat":"T3",
"subCategory":[
{
"subCat":"T3A",
"warrantyPeriod":3
},
{
"subCat":"T3B",
"warrantyPeriod":5
},
{
"subCat":"T3C",
"warrantyPeriod":7
},
{
"subCat":"T3D",
"warrantyPeriod":11
}
],
"warrantyPeriod":4
}
],
"television_warrantyPeriod":24
},
"title":"BrandName"
}

理想情况下,我会传入类别名称,即“电视”和 catsubCat 值,这些值可以是可选的。

例如像这样的 -

{
"categorySlug": "television",
"brandId": "123",
"model": "T2"
}

在这种情况下,如果没有指定 T2A 或 T2B,我希望找到“15”,这是 T2 的 warrantyPeriod 值。

我的查询函数是这样的-

var data map[string]string
err := json.NewDecoder(r.Body).Decode(&data)
log.Println(err)
var buffer bytes.Buffer
buffer.WriteString("category.")
buffer.WriteString(data["categorySlug"])
brandId, _ := strconv.Atoi(data["brandId"])
concernedbrandandcategory := database.GetMappedFields("Brands", bson.M{"brandId": brandId, buffer.String(): bson.M{"$exists": true}}, bson.M{buffer.String(): 1})
categorymap := concernedbrandandcategory[0]
log.Println(categorymap["category"]["television"], reflect.TypeOf(categorymap))

我的 GetMappedFields 函数如下所示 -

func GetMappedFields(collectionName string, query interface{}, selector interface{}) (result []map[string]interface{}) {
MgoSession.DB(Dbname).C(collectionName).Find(query).Select(selector).All(&result)
return
}

我只是无法理解这个有时返回 map 有时返回接口(interface)的嵌套结构!任何帮助将不胜感激!

最佳答案

你可以这样做

    majorCat := body["categorySlug"]
category := body["category"]
subCategory := body["subCategory"]
brandId, err := strconv.Atoi(body["brandId"])
if err != nil {
log.Println(err)
}
result := database.GetMappedFields("Brands", bson.M{"brandId": brandId}, bson.M{"category": 1, "_id": 0})
internalObj := result[0]["category"].(map[string]interface{})
finalValue := internalObj["television_warrantyPeriod"]
if category != "" {
for _, v := range internalObj[majorCat].([]interface{}) {
subObj := v.(map[string]interface{})
if subObj["cat"] == category {
finalValue = subObj["warrantyPeriod"]
if subCategory != "" {
minorObj := subObj["subCategory"].([]interface{})
for _, iter := range minorObj {
kevVal := iter.(map[string]interface{})
if kevVal["subCat"] == subCategory {
finalValue = kevVal["warrantyPeriod"]
}
}
}
}
}
}

希望这是动态的,或者你可以创建一个结构,这样它就可以直接解码成欢呼声

关于mongodb - Golang 从 MongoDB 的嵌套 json 数据映射中找到一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39364133/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com