在数据库golang中保存发布数据(使用整数和字符串值)的正确方法是什么?
问题描述:
我在golang代码象下面这样:在数据库golang中保存发布数据(使用整数和字符串值)的正确方法是什么?
package main import ( "github.com/gin-gonic/gin" "gopkg.in/mgo.v2" "gopkg.in/mgo.v2/bson" "log" "time" ) func main() { router := gin.Default() router.POST("/save-address", SaveAddress) router.Run() } func SaveAddress(c *gin.Context){ var err error conditions := bson.M{} c.Request.ParseForm() for key, _ := range c.Request.PostForm { if key != "id"{ conditions[key] = c.PostForm(key) } } conditions["_id"] = 1 mongoSession := ConnectDb() sessionCopy := mongoSession.Copy() defer sessionCopy.Close() getCollection := mongoSession.DB("bformssettings").C("address") err = getCollection.Insert(conditions) if err != nil{ println(err) }else{ println("Data saved successfully!!!") } } func ConnectDb() (mongoSession *mgo.Session) { mongoDBDialInfo := &mgo.DialInfo{ Addrs: []string{"localhost:27017"}, Timeout: 60 * time.Second, Database: "bformssettings", } mongoSession, err := mgo.DialWithInfo(mongoDBDialInfo) if err != nil { log.Fatalf("CreateSession: %s\n", err) } mongoSession.SetMode(mgo.Monotonic, true) return mongoSession }
当我运行代码,保存在数据库中的数据是这样的:
{ "_id" : 1, "customer_id" : "3", "address" : "Chicago, IL", "city" : "Chicago", "state" : "IL", "zipcode" : "60647" }
哪里CUSTOMER_ID为整数值,但它保存在数据库作为字符串。
有,我可以从字符串转换的客户ID以整数保存在数据库中的数据之前,1路。
是否存在另一种方式来保存数据,因为它是为提交(如保存为整数整数值)?
答
如果你看看你保存的文档,你可以看到它的财产_id
已经是一个数字(而不是字符串),所以是的,这是绝对有可能的。
为什么你最终string
型customer_id
财产存在的原因是因为你保存文档(conditions
变量)适用于customer_id
属性string
值。它是string
类型的,因为你的Context.PostForm()
返回值返回一个形式值作为string
填充它。
如果你希望它是数据库中的一个整数,它conditions
设置之前,转换为围棋整数。例如,您可以使用strconv.Atoi()
。
for key, _ := range c.Request.PostForm {
value := c.PostForm(key)
if key == "customer_id" {
if id, err := strconv.Atoi(value); err != nil {
// Not a valid number, handle error
} else {
conditions[key] = id
}
} else {
if key != "id"{
conditions[key] = value
}
}
}
你必须以某种定义哪些字段应该保持整数值。我只是展示了一种单一领域的方法。如果你有多个,你可以在一个片段中列出它们,并使用一个for
循环来检测/处理所有;甚至更好,把它们放在一个集合起来的地图中,你可以在没有for
循环的情况下检测这些字段。
另一种选择是创建一个struct
类型的表单输入数据建模类,并使用像Gorilla's schema这样的库以类型感知的方式解组到该结构中。
'c.PostForm(key)' - 这会返回什么类型? – zerkms
这将返回字符串值,即以字符串格式保存的方式。 – Swati
那么它不是“保存在数据库中的数据与golang不正确?”那么:-)这是你首先检索“不正确”的数据 – zerkms