Golang Go语言中关于 mongo model 的映射问题

发布于 1周前 作者 htzhanglong 来自 Go语言

Golang Go语言中关于 mongo model 的映射问题

使用的库是 https://github.com/mongodb/mongo-go-driver

model 定义

type MUser struct {
	Id        bson.ObjectId `bson:"_id,omitempty"`
	CreateAt  int64         `bson: "createtime"`
	IsRemoved int           `bson: "hasremoved"`
	// 登录名
	Name string `bson: "name"`
	// 昵称
	Nick string `bson: "nick"`
	// 密码
	PassWord string `bson: "password"`
	Role     string `bson: "role"`
	Status   int    `bson: "status"`
}

为什么插入的数据是这个样子的?

{
    "_id" : ObjectId("5f747b15dedcfdbb4c4ab599"),
    "createat" : NumberLong(1601469205),
    "isremoved" : 0,
    "name" : "sample1",
    "nick" : "nick",
    "password" : "5f4dcc3b5aa765d61d8327deb882cf99",
    "role" : "dev",
    "status" : 0
}

请大家指点一下?


更多关于Golang Go语言中关于 mongo model 的映射问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

8 回复

问题是啥?哪里不符合预期了?

更多关于Golang Go语言中关于 mongo model 的映射问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


#1 感觉他想说的是指定了 bson tag,但是没按照 tag value 来生成字段名…

我猜是空格……

#3 正解,冒号后有空格 IDE 都会提示的才对

还真的是这样。。

这命名看着真难受

你是说后面的 bson,后面的 bson 是特地该的

在Golang中处理MongoDB的数据映射时,通常使用官方的MongoDB Go驱动程序(go.mongodb.org/mongo-driver/mongo)以及一些ORM(对象关系映射)库,如mongo-go-driver/mongo-driver/mongo/options或更高级的go.mongodb.org/mongo-driver/bson等,来简化结构体与MongoDB文档之间的转换。

以下是一些关键点,帮助你解决Go语言中关于MongoDB model的映射问题:

  1. 定义结构体:首先,定义一个与MongoDB文档结构相匹配的结构体。使用bson标签来指定MongoDB中的字段名,如果Go结构体字段名与MongoDB文档字段名不一致,这点尤为重要。

  2. 使用bson.M或原始BSON类型:对于复杂的查询或更新操作,可以使用bson.M来构建动态的BSON文档,或者直接使用bson.Raw类型处理未解析的BSON数据。

  3. 处理嵌入文档和数组:对于MongoDB中的嵌入文档和数组,可以直接在Go结构体中使用嵌套结构体和切片类型来表示。

  4. 错误处理:确保对MongoDB操作返回的错误进行适当处理,比如使用context.Context来管理请求的超时和取消。

  5. 使用ORM库(可选):虽然Go的MongoDB驱动已经很强大,但如果你更倾向于使用ORM风格,可以考虑使用像mongo-go-driver/mongo-driver/x/mongo/driver/options或社区驱动的ORM库,它们可以进一步简化数据访问层的代码。

总之,正确映射MongoDB模型到Go结构体,关键在于理解MongoDB的数据模型,并正确使用Go的bson库和MongoDB驱动。

回到顶部