Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Golang中使用游标进行迭代时如何从mongodb记录中提取字段_Mongodb_Go - Fatal编程技术网

在Golang中使用游标进行迭代时如何从mongodb记录中提取字段

在Golang中使用游标进行迭代时如何从mongodb记录中提取字段,mongodb,go,Mongodb,Go,我对golang编程和mongodb接口相当陌生 我有一个由另一个应用程序创建的记录数据库。我试图遍历数据库并检查每条记录的特定字段。我可以将完整记录解码为bson,但无法获得具体值 此结构定义了我要提取的3个字段: 键入myDbaseRec结构{ aid字符串`bson:“pon-util-aid”` ingressPct字符串`bson:“入口桶百分比”` 出口PCT字符串`bson:“出口桶百分比”` } 下面是我的代码,用于在集合之后遍历游标。查找(ctx、queryFilter)并将

我对golang编程和mongodb接口相当陌生

我有一个由另一个应用程序创建的记录数据库。我试图遍历数据库并检查每条记录的特定字段。我可以将完整记录解码为bson,但无法获得具体值

此结构定义了我要提取的3个字段:

键入myDbaseRec结构{
aid字符串`bson:“pon-util-aid”`
ingressPct字符串`bson:“入口桶百分比”`
出口PCT字符串`bson:“出口桶百分比”`
}
下面是我的代码,用于在集合之后遍历游标。查找(ctx、queryFilter)并将结果解码为bson和my struct:

var myResult myDbaseRec
var bsonmsult bson.M
变量计数整数
用于游标。下一步(ctx){
错误:=游标。解码(&myResult)
如果错误!=零{
fmt.Println(“cursor.Next()错误:”,err)
恐慌(错误)
//如果没有光标。解码错误
}否则{
fmt.Println(“\n结果类型:”,reflect.TypeOf(myResult))
fmt.Printf(“结果:%+v\n”,myResult)
}
err=cursor.Decode(&bsonmsult)
如果错误!=零{
fmt.Println(“bson解码错误:,错误)
恐慌(错误)
//如果没有光标。解码错误
}否则{
fmt.Println(“\n结果类型:”,reflect.TypeOf(bsonMResult))
fmt.Println(“\nresult:,bsonResult”)
}
}
下面是循环的一个迭代示例。bson解码似乎正常,但我的结构为空:

result type: internal.myDbaseRec
result: {aid: ingressPct: egressPct:}

result type: primitive.M

result: map[pon-util-aid:ROLT-1-MONTREAL/1/1/xp2 _id:ObjectID("5d70b4d1b3605301ef72228b") 
admitted-assured-upstream-bw:0 admitted-excess-upstream-bw:0 admitted-fixed-upstream-bw:0 
assured-upstream-bytes:0 available-excess-upstream-bw:0 available-fixed-upstream-bw:622080 
app_counters_key_field:ROLT-1-MONTREAL/1/1/xp2 app_export_time:1567665626 downstream-octets:52639862633214 
egress-bucket-bps:8940390198 egress-bucket-percent:91 egress-bucket-seconds:559 
excess-upstream-bytes:0 fixed-upstream-bytes:0 ingress-bucket-bps:8253153852 
ingress-bucket-percent:84 ingress-bucket-seconds:559 sample-time:0 upstream-octets:48549268162714]
我本以为会得到的

result: {aid:"ROLT-1-MONTREAL/1/1/xp2" ingressPct:84 egressPct:91}
关于如何从每个记录中正确查找这3个字段,有什么建议吗


===更新:下面的第一条评论回答了我的问题。

首先,在Go中,仅导出以(Unicode)大写字母开头的字段。另见。默认解码器将尝试仅对导出的字段进行解码。因此,您应该将结构更改为:

type myDbaseRec struct {
    Aid        string  `bson:"pon-util-aid"`
    IngressPct int32  `bson:"ingress-bucket-percent"`
    EgressPct  int32  `bson:"egress-bucket-percent"`
}

还要注意,上面用于
IngressPct
ExpressPCT
的结构具有类型
int32
。这是因为文档中的值是用数字(int/double)表示的,而不是字符串。您可以相应地将其更改为其他号码类型,即int16、int64等。

非常感谢!按照您建议的方式更改结构允许我现在从数据库记录中获取值!这帮了大忙!