我对golang很陌生,想从mongodb的响应中过滤出软件包的名称和版本。我正在使用mgo从mongodb获取响应。
这是我的代码,可从mongodb获得响应:
pipe := c.Pipe([]bson.M{{"$match": bson.M{"host": "test.server.lan"}}})
resp := []bson.M{}
err := pipe.All(&resp)
if err != nil {
fmt.Println("oh")
}
fmt.Println(resp)
响应的输出:
[map[_id:ObjectIdHex("4de39d42ke9fc601db635618") host:test.server.lan installed:[map[arch:all homepage: name:adduser status:ii vendor: version:3.118] map[arch:all homepage: name:adwaita-icon-theme status:ii vendor: version:3.30.1-1] map[arch:all homepage: name:ampua-watchdog status:ii vendor: version:2.2.2~ui10] map[arch:amd64 homepage:http://apparmor.net/ name:apparmor status:ii vendor: version:2.13.2-10] map[arch:amd64 homepage: name:apt status:ii vendor: version:1.8.2] map[arch:all homepage: name:apt-listchanges status:ii vendor: version:3.19] map[arch:amd64 homepage: name:apt-utils status:ii vendor: version:1.8.2] map[arch:amd64 homepage: name:base-files status:ii vendor: version:10.3+deb10u2]
我只想要每个软件包的名称和版本。
最佳答案
您收到的响应是一个具有内部String() string
方法的对象,因此以这种方式输出。
它由 slice 和 map 组成,外观格式如下:
[
map[
_id:ObjectIdHex("4de39d42ke9fc601db635618")
host:test.server.lan
installed:
[
map[
arch:all
homepage:
name:adduser
status:ii
vendor:
version:3.118
]
map[
arch:all
homepage:
name:adwaita-icon-theme
status:ii
vendor:
version:3.30.1-1
]
map[
arch:all
homepage:
name:ampua-watchdog
status:ii
vendor:
version:2.2.2~ui10
]
...
可能更熟悉的外观是:
[
{
"_id":ObjectIdHex("4de39d42ke9fc601db635618"),
"host":"test.server.lan",
"installed":
[
{
"arch":"all",
"homepage":"",
"name":"adduser",
"status":"ii",
"vendor":"",
"version":"3.118"
},
{
"arch":"all",
"homepage":"",
"name":"adwaita-icon-theme",
"status":"ii",
"vendor":"",
"version":"3.30.1-1"
},
{
"arch":"all",
"homepage":"",
"name":"ampua-watchdog",
"status":"ii",
"vendor":"",
"version":"2.2.2~ui10"
},
...
但是基本上是一样的。
要遍历resp,您可以执行以下操作:
for server := range resp {
fmt.Printf("Host: %s\n", server.host)
for installedPackage := range server.installed {
fmt.Printf("\tPackage: %s\tVersion: %s\n", installedPackage.name, installedPackage.version)
}
}
关于mongodb - 从Golang中的bson.M中过滤出值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60072372/