【发布时间】:2017-12-22 20:55:54
【问题描述】:
我目前正在将 mongodb 与 mgo lib 用于 Web 应用程序,但我不确定我使用它的方式是否是好的 ..
package db
import (
"gopkg.in/mgo.v2"
)
const (
MongoServerAddr = "192.168.0.104"
RedisServerAddr = "192.168.0.104"
)
var (
MongoSession, err = mgo.Dial(MongoServerAddr)
MDB = MongoSession.DB("message")
MCol = MDB.C("new")
MSav = MDB.C("save")
UDB = MongoSession.DB("account")
UCol = UDB.C("user")
)
我初始化数据库会话并创建获取集合和文档值的变量, 所以当我需要查询一个集合时,我使用变量来制作它。
像这样:
func UserExist(username string) bool {
user := Users{}
err := db.UCol.Find(bson.M{"username": username}).One(&user)
if err != nil {
return false
} else {
return true
}
}
那么有没有最佳实践或者这个很好..? 谢谢
【问题讨论】:
-
使用函数来设置数据库会话比使用变量声明更好。使用函数的一个原因是您可以处理从 Dial 返回的错误。对于 UserExist,我将使用 count of documents in the result set 来确定文档是否存在。无需获取实际文档。
-
感谢 UserExist 函数的提示!但是使用初始化会话连接的功能,我可以使用 db 包中的“func init()”来执行此操作,并使用返回会话为 db 和集合分配全局变量吗?我只是不确定如何在打开数据库的情况下保持我的会话,而不是每次我需要它时都创建一个“mgo.Dial()”,并且我的数据库和集合已经初始化......