mongodb - 如何创建一个 mongo db 包
问题描述
我想建立一个基础设施,它是项目的一个包。以便其他开发人员可以导入此包对数据库执行 CRUD 操作。
但是我在测试过程中遇到了一个错误:
type Students struct {
Name string
Age int
}
type InsertOneResult struct {
InsertedID interface{}
}
func dbGetOne(coll, document interface{}) (*InsertOneResult, error) {
...
}
func dbUpdateOne(coll, document interface{}) (*InsertOneResult, error) {
...
}
func dbDeleteOne(coll, document interface{}) (*InsertOneResult, error) {
...
}
func dbInsertOne(coll, document interface{}) (*InsertOneResult, error) {
res, err := coll.InsertOne(context.TODO(), document)
if err != nil {
log.Fatal(err)
}
return &InsertOneResult{InsertedID: res[0]}, err
}
func main() {
client, err := mongo.NewClient(options.Client().ApplyURI("mongodb://<user>:<password>@<host>:<port>/<dbname>"))
if err != nil {
log.Fatal(err)
}
ctx, _ := context.WithTimeout(context.Background(), 30*time.Second)
err = client.Connect(ctx)
if err != nil {
log.Fatal(err)
}
coll := client.Database("db").Collection("students")
data := Students{"Amy", 10}
res, err := dbInsertOne(coll, data)
if err != nil {
log.Fatal(err)
}
fmt.Printf("inserted document with ID %v\n", res.InsertedID)
}
这是错误:
./main.go:24:18: coll.InsertOne undefined (type interface {} is interface with no methods)
有没有办法解决这个问题?提前致谢。
解决方案
嘿,看起来错误可能来自类型转换问题。解决方案是在函数中明确定义coll
as的类型。这允许编译器在编译时找出输入的结构,而不必依赖抽象接口。*mongo.Collection
dbInsertOne()
func dbInsertOne(coll *mongo.Collection, document interface{}) (*InsertOneResult, error) {
res, err := coll.InsertOne(context.TODO(), document)
if err != nil {
log.Fatal(err)
}
return &InsertOneResult{InsertedID: res.InsertedID}, err
}
我会进一步建议,document
如果可能的话,第二个参数也应该是一个类型化的已知术语。例如
func dbInsertOne(coll *mongo.Collection, document Students)
静态类型将有很大帮助并消除任何混乱。
推荐阅读
- javascript - 在 React 网站中更新文本的最合适方法是什么?
- java - 属性文件值未出现在我的变量中
- arrays - PowerShell 提高阵列更新性能
- reactjs - 在 REACTjs 中选中复选框时如何隐藏段落?
- reactjs - React useMemo re-render issue
- powershell - Powershell重命名目录中的文件
- java - Jmeter:使用 While Controller 进行失败的请求重试,ThreadGroup 循环计数不起作用
- javascript - 循环遍历 HTMLCollection 时包装元素会导致问题
- amazon-web-services - 添加 SSL 配置后 Mosquitto MQTT 服务重启失败
- c++ - 字符串附加属性c ++的异常行为