go - 从类型 []primitive.M Go 中读取数据
问题描述
我编写代码从 MongoDB 读取数据。
输出类型是[]primitive.M
这是我的代码
func GetAllChildOfNode(node string) error {
ctx, _ := context.WithTimeout(context.Background(), 10*time.Second)
client, err := mongo.Connect(ctx, options.Client().ApplyURI("URI"))
if err != nil {
return err
}
defer client.Disconnect(ctx)
database := client.Database("users")
users := database.Collection("users")
matchStage := bson.D{{"$match", bson.D{{"username", node}}}}
graphStage := bson.D{{"$graphLookup", bson.D{{"from", "users"}, {"startWith", "$username"}, {"connectFromField", "userparentid"}, {"connectToField", "userparentid"}, {"as", "descendants"}}}}
unWind := bson.D{{"$unwind", "$descendants"}}
replaceRoot := bson.D{{"$replaceRoot", bson.D{{"newRoot", "$descendants"}}}}
proJect := bson.D{{"$project", bson.D{{"descendants", 0}}}}
showInfoCursor, err := users.Aggregate(ctx, mongo.Pipeline{matchStage, graphStage, unWind, replaceRoot, proJect})
if err != nil {
panic(err)
}
var showsWithInfo []bson.M
if err = showInfoCursor.All(ctx, &showsWithInfo); err != nil {
panic(err)
}
fmt.Println(showsWithInfo)
fmt.Println("---------------------")
fmt.Printf("%T \n", showsWithInfo)
fmt.Println("---------------------")
return nil
}
这是我的输出结果:
[map[_id:ObjectID("5ebd05b52f37000085002219") comdepartment:BOMON_VIENTHONG comid:DHBK lastname:SV1_BMVT password:123456 usercode:DHBK_0015 userdate:2020-05-05 useremail:SV1_BMVT@edu.com.vn username:SV1_BMVT userparentid:GV_BMVT userstatus:ACTIVE usertel:0907111015 usertype:USER_COM] map[_id:ObjectID("5ebd05b52f3700008500221a") comdepartment:BOMON_VIENTHONG comid:DHBK lastname:SV2_BMVT password:123456 usercode:DHBK_0016 userdate:2020-05-05 useremail:SV2_BMVT@edu.com.vn username:SV2_BMVT userparentid:GV_BMVT userstatus:ACTIVE usertel:0907111016 usertype:USER_COM] map[_id:ObjectID("5ece3517b8d5570916d013f6") comdepartment:BOMON_VIENTHONG comid:DHBK lastname:SV5_BMVT password:123 usercode:DHBK_0019 userdate:2020-05-14 useremail:SV5_BMVT@edu.com.vn username:SV5_BMVT userparentid:GV_BMVT userstatus:ACTIVE usertel:0907111019 usertype:USER_COM] map[_id:ObjectID("5ebd05b52f3700008500221b") comdepartment:BOMON_VIENTHONG comid:DHBK lastname:SV3_BMVT password:123456 usercode:DHBK_0017 userdate:2020-05-05 useremail:SV3_BMVT@edu.com.vn username:SV3_BMVT userparentid:GV_BMVT userstatus:ACTIVE usertel:0907111017 usertype:USER_COM]
map[_id:ObjectID("5ebd05b52f3700008500221c") comdepartment:BOMON_VIENTHONG comid:DHBK lastname:SV4_BMVT password:123456 usercode:DHBK_0018 userdate:2020-05-05 useremail:SV4_BMVT@edu.com.vn username:SV4_BMVT userparentid:GV_BMVT userstatus:ACTIVE usertel:0907111018 usertype:USER_COM] map[_id:ObjectID("5eddf0a9b8d5570916dae6ff") comdepartment:BOMON_VIENTHONG comid:DHBK lastname:SV6_BMVT password:123456 usercode:DHBK_0019 userdate:2020-06-08 useremail:SV6_BMVT@edu.com.vn username:SV6_BMVT userparentid:GV_BMVT userstatus:ACTIVE usertel:0907111020 usertype:USER_COM]]
---------------------
[]primitive.M
---------------------
但我现在不知道如何username
仅从[]primitive.M
类型中获取。例如
TRUONGKHOA_BMVT,PHOKHOA_BMVT,THUKY_BMVT,GV_BMVT,SV1_BMVT,SV2_BMVT,SV3_BMVT,SV4_BMVT,SV5_BMVT,SV6_BMVT
解决方案
在这里总结一下答案。primitive.M
只不过是一个map[string]interface{}
. 所以要访问username
你可以做这样的事情,
for _, s := range showsWithInfo {
fmt.Println(s["username"])
}
在将其用作字符串之前,您可能必须先键入它
username,ok := s["username"].(string)
if !ok {
panic("username could not be converted to string")
}
推荐阅读
- css - 我希望有一个子项要求所有其他元素的宽度
- reactjs - react-native中如何使用eval()动态导入组件
- python - Python - 从 ReactJS div 中抓取列表内容
- opencv - Keras 从不同图像中提取相同特征
- c# - 使用 EF Core 3.1 通过不可翻译的方法进行过滤
- javascript - 如何使用 javascript 在远程 PC 的浏览器上播放来自机器的音频数据流?
- vba - Libre calc 宏一直有效,直到计算机重新启动
- c - 如何检测数字是C中的整数还是浮点数?
- javascript - 在顶点图表中动态添加系列
- python - 将变量放入正则表达式对象并将它们与常规文本区分开来