在 golang 中过滤 bson.M 中的值
短信预约 -IT技能 免费直播动态提醒
一分耕耘,一分收获!既然都打开这篇《在 golang 中过滤 bson.M 中的值》,就坚持看下去,学下去吧!本文主要会给大家讲到等等知识点,如果大家对本文有好的建议或者看到有不足之处,非常欢迎大家积极提出!在后续文章我会继续更新Golang相关的内容,希望对大家都有所帮助!
问题内容我对 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
方法,因此以这种方式输出。
它由切片和映射组成,格式如下:
[
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"
},
...
但是基本上是一样的。 要迭代响应,您可以执行以下操作:
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)
}
}
以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持编程网!更多关于Golang的相关知识,也可关注编程网公众号。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341