英文:
Nested documents in model struct
问题
假设你有一个名为UserModel
的结构体,其中包含一个名为Orders
的字段。你想知道在这种情况下,最佳的存储方式是什么。
根据你提供的代码,Orders
字段可以有三种可能的类型:
-
[]string
:这意味着Orders
是一个字符串数组,每个字符串表示一个订单的ID或其他标识符。这种方式适用于订单ID是以字符串形式存储的情况。 -
[]bson.ObjectId
:这意味着Orders
是一个bson.ObjectId
的数组,每个bson.ObjectId
表示一个订单的引用。这种方式适用于订单ID是以bson.ObjectId
形式存储的情况。 -
[]OrderModel
:这意味着Orders
是一个OrderModel
的数组,每个OrderModel
表示一个完整的订单对象。这种方式适用于你想在UserModel
中直接存储完整的订单对象的情况。
选择最佳的存储方式取决于你的具体需求和使用场景。如果你只需要存储订单的ID或其他标识符,并且在需要时可以通过ID来查询订单的详细信息,那么使用[]string
或[]bson.ObjectId
都是合理的选择。如果你需要在UserModel
中直接存储完整的订单对象,并且在需要时可以直接访问订单的所有属性,那么使用[]OrderModel
是最合适的方式。
需要注意的是,无论你选择哪种方式,都需要在PopulateOrders
函数中根据具体的查询逻辑来获取订单数据,并将其赋值给user.Orders
字段。
英文:
Say I have a UserModel
like so:
type (
OrderModel struct {
ID bson.ObjectId `json:"id" bson:"_id"`
...
}
UserModel struct {
...
// What do I store here? Is this an array of strings? An array of bson.ObjectID? Or an Array of OrderModel?
Orders []string `json:"orders" bson:"orders"`
Orders []bson.ObjectId `json:"orders" bson:"orders"`
Orders []OrderModel `json:"orders" bson:"orders"`
...
}
)
func (user *UserModel) PopulateOrders() {
orders := []OrderModel{}
// Query orders and assign to variable orders to then be assigned the the user Object
// {magic query here}
user.Orders = orders
}
In MongoDB, an array of ObjectID
s would be stored to reference the OrderModel
documents. Later on, I have a function that will populate the Order
documents like described above: PopulateOrders
.
What is the best way for the case above?
答案1
得分: 1
我会使用两个单独的字段,一个用于存储ID的切片,另一个用于存储惰性加载的对象的切片。
在保存时省略惰性加载的对象切片。代码可能如下所示:
type UserModel struct {
// ...
OrderIDs []bson.ObjectId `json:"orderIDs" bson:"orderIDs"`
Orders []OrderModel `json:"orders" bson:"-"`
// ...
}
请注意,我故意没有将Orders
从JSON序列化中排除,因为在JSON表示中它可能是有用的。
英文:
I would use 2 separate fields, one for the slice of IDs, and one for the slice of lazily loaded objects.
Omit the lazily loaded object slice from saving. It could look like this:
type UserModel struct {
// ...
OrderIDs []bson.ObjectId `json:"orderIDs" bson:"orderIDs"`
Orders []OrderModel `json:"orders" bson:"-"`
// ...
}
Note that I intentionally did not exclude Orders
from JSON serialization, as it is (may) be useful in JSON representation.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论