我想获取MongoDB集合中所有键的名称。
例如,从这个:
"Id": ObjectId("5f5a010d431c4519dcda0e3d")
"title": "App"
"query": ""
"db": ""
"widgettype": ""
"tablename": "active_instance"
fields:Object
user:"name",
key:"passcode"
"status": "active"
"inlibrary": ""
"createdts": 1599733804
字符串
使用“gopkg.in/mgo.v2“和“gopkg.in/mgo.v2/bson“包。
err := mongodbSession.DB(dbName).C(collectionName).Find(bson.M{}).One(&result)
var keyset []string
for index, _ := range result {
fmt.Printf("%+v\n", index)
keyset = append(keyset, index)
}
fmt.Println(keyset)
型
输出如下
[_id title query db widgettype status fields inlibrary createdts ]
型
子密钥未被提供,即用户和密钥。
2条答案
按热度按时间ymdaylpp1#
嵌入的文档将显示为
result
中的另一个bson.M
值,因此您必须使用递归来遍历这些值。你可以这样做:
字符串
使用它的示例:
型
这将输出(在Go Playground上尝试):
型
如果您查看结果,则会发现
user
和key
包含在内,但无法分辨它们是文档的字段还是嵌入文档的字段。您可以选择将嵌入文档字段本身的字段名称作为嵌入文档字段的前缀,例如获取
fields.user
和fields.key
。这是你可以做到这一点:
型
这将输出(在Go Playground上尝试):
型
还要注意,上面的解决方案不处理数组。如果你有数组,你也应该递归地覆盖它们,如果它们包含另一个数组或对象,你也应该做同样的事情(递归地)。这是一个练习,你可以扩展它来处理数组。
uxhixvfz2#
包“gopkg.in/mgo.v2“和“gopkg.in/mgo.v2/bson“已过时。请替换为“go.mongodb.org/mongo-driver/bson“和“go.mongodb.org/mongo-driver/mongo“。必须使用递归来检索嵌套字段。假定数据库“store”具有包含此文档的集合“users
字符串
从集合中检索键的代码是:
型
输出量:
型