gpt4 book ai didi

go - mgo 中的模型关系

转载 作者:IT王子 更新时间:2023-10-29 02:16:17 24 4
gpt4 key购买 nike

我正在用 mgo 编写一个数据库接口(interface)。我的模型中的某些文档引用了其他文档。

type Child struct{
Id bson.ObjectId `json:"_id,omitempty" bson:"_id,omitempty"`
C string
}

type Parent struct {
Id bson.ObjectId `json:"_id,omitempty" bson:"_id,omitempty"`
A string
B Child
}

child := Child{
Id: bson.NewObjectId(),
C: "panino"
}

parent := Parent{
Id: bson.NewObjectId(),
A: "Just a string",
B: child,
}

我的目标是:

  1. 将这些文档嵌入代码中,
  2. 将父级存储在 Parents 集合中,仅引用子级,
  3. 将 child 作为独立文档存储在 Children 集合中。

以下内容:

type Child struct{
Id bson.ObjectId `json:"_id,omitempty" bson:"_id,omitempty"`
C string `bson:"-"`
}

在 1 和 2 中成功,但只有 child.Id 存储在 Children 集合中。我对 Golang/mgo 很陌生。玩了一下Marshaling和Unmarshaling,但是不太明白Getter和Setter是怎么工作的。我有一种感觉,他们会成功的。有什么线索吗?

最佳答案

您可能正在寻找 bson:",omitempty" 标签而不是 bson:"-"。前者只有在该字段为空时才会省略该字段,而不是一直省略。或者,您也可以有一个仅用于引用的辅助 ChildReference 类型。可以对同一集合使用不同类型。

顺便说一句,请注意,尽管在某些情况下会采用这种做法,但您必须在所有情况下都将集合名称存储在文档 ID 旁边。对于定义良好的模式,最常见的做法是只存储文档 ID(例如,使用 {"person_id": 123},含义很清楚)。

关于go - mgo 中的模型关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28810662/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com