英文:
Defining a MongoDB Schema/Collection in mgo
问题
我想使用mgo来创建/保存一个MongoDB集合。但我希望能更详细地定义它(例如,指定一个属性是必需的,另一个属性是枚举类型并具有默认值)。
我已经像这样定义了结构体,但不知道如何描述它的约束条件。
type Company struct {
Name string `json:"name" bson:"name"` // --> 我希望这个属性是必需的
CompanyType string `json:"companyType" bson:"companyType"` // --> 我希望这个属性是枚举类型
}
在mgo中是否可以实现这样的功能,就像在MongooseJS中一样?
英文:
I want to use mgo to create/save a MongoDB collection. But I would like to define it more extensively (for e.g to mention that one of the attribute is mandatory, another one is of an enum type and has a default value).
I have defined the struct like this, but don't know how to describe the constraints on it.
type Company struct {
Name string `json:"name" bson:"name"` // --> I WANT THIS TO BE MANDATORY
CompanyType string `json:"companyType" bson:"companyType"` // -->I WANT THIS TO BE AN ENUM
}
Is this possible to do in mgo, like how we can do it in MongooseJS?
答案1
得分: 1
mgo不是一个ORM或验证工具。mgo只是与MongoDB的接口。
自己进行验证并不是坏事。
type CompanyType int
const (
CompanyA CompanyType = iota // 这是默认值
CompanyB CompanyType
CompanyC CompanyType
)
type Company struct {
Name string
CompanyType string
}
func (c Company) Valid() bool {
if c.Name == "" {
return false
}
// 如果是用户输入,您可能希望验证CompanyType的底层整数是否超出枚举范围。
if c.CompanyType < CompanyA || c.CompanyType > CompanyB {
return false
}
return true
}
点击这里了解更多关于Go中枚举的信息。
英文:
mgo isn't an ORM or a validation tool. mgo is only an interface to MongoDB.
It's not bad to do validation all by yourself.
type CompanyType int
const (
CompanyA CompanyType = iota // this is the default
CompanyB CompanyType
CompanyC CompanyType
)
type Company struct {
Name string
CompanyType string
}
func (c Company) Valid() bool {
if c.Name == "" {
return false
}
// If it's a user input, you'd want to validate CompanyType's underlying
// integer isn't out of the enum's range.
if c.CompanyType < CompanyA || c.CompanyType > CompanyB {
return false
}
return true
}
Check this out for more about enums in Go.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论