登录
首页 >  Golang >  Go问答

使用 mgo 的非结构化 MongoDB 集合

来源:Golang技术栈

时间:2023-04-04 21:09:36 152浏览 收藏

Golang不知道大家是否熟悉?今天我将给大家介绍《使用 mgo 的非结构化 MongoDB 集合》,这篇文章主要会讲到golang等等知识点,如果你在看完本篇文章后,有更好的建议或者发现哪里有问题,希望大家都能积极评论指出,谢谢!希望我们能一起加油进步!

问题内容

我对 Go 很陌生。从我在 mGo 的示例中看到的情况来看,为了查询集合然后从中读取,您必须预定义将在结构中返回的数据。

type Person struct {
    ID        bson.ObjectId `bson:"_id,omitempty"`
    Name      string
    Phone     string
    Timestamp time.Time
}

在 PHP 中,文档被分配给一个数组。这是完美的,因为一条记录可能具有完全不同的一组键(可能不包含姓名或电话但包含电子邮件),我可以直接访问它而无需设置预定义的类/结构/变量。

有没有办法在 Go / mGo 中做同样的事情?

正确答案

有多种方法可以处理这个问题。

使用地图:

var m bson.M
err := collection.Find(nil).One(&m)
check(err)
for key, value := range m {
    fmt.Println(key, value)
}

请注意,就mgo而言,bson.M没有什么特别之处。它只是一种map[string]interface{}类型,您可以定义自己的地图类型并将它们与 mgo 一起使用,即使它们具有不同的值类型。

使用文档切片:

bson.D是mgo内部已知的切片,它的存在既提供了一种更有效的机制,也提供了一种保留键顺序的方法,MongoDB 在某些情况下(例如,在定义索引)。

例如:

var d bson.D
err := collection.Find(nil).One(&d)
check(err)
for i, elem := range d {
    fmt.Println(elem.Name, elem.Value)
}

使用内联地图字段

,inlinebson标志也可以用在地图字段中,这样你就可以吃蛋糕了。换句话说,它允许使用结构,以便于操作已知字段,同时允许通过内联映射处理未知字段。

例如:

type Person struct {
    ID        bson.ObjectId `bson:"_id,omitempty"`
    Name      string
    Phone     string
    Extra     bson.M `bson:",inline"`
}

今天关于《使用 mgo 的非结构化 MongoDB 集合》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于golang的内容请关注golang学习网公众号!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表