mongodb - MongoDB交互好实践
问题描述
我的任务是重构以下代码,这对我来说似乎是错误的。它使用 go 例程与 Mongodb 交互。
type StoreResult struct {
Data interface{}
Err *model.AppError
}
type StoreChannel chan StoreResult
// **** EVERY BEHAVIOR OF NoSqlNewsStore USES "Do" TO INTERACT WITH MONGODB
func (no NoSqlNewsStore) GetAllReactions(postID string) StoreChannel {
return Do(func(result *StoreResult) {
ctx, cancel := no.GetCtx()
defer cancel()
dbReactions, err := no.GetConn().Collection("reactions").Find(ctx, bson.M{"post_id": postID})
if err != nil {
fmt.Println("[error]: func GetAllReactions.Find, NoSqlStore err => " + err.Error())
result.Err = model.NewAppError("NoSqlStore", "nosqlstore.news.get_reactions", nil, err.Error(), http.StatusInternalServerError)
return
}
reactionsArr := make([]*model.Reaction, 0)
for dbReactions.Next(ctx) {
var reaction *model.Reaction
if err := dbReactions.Decode(&reaction); err == nil {
reactionsArr = append(reactionsArr, reaction)
}
}
result.Data = reactionsArr
})
}
func Do(f func(result *StoreResult)) StoreChannel {
storeChannel := make(StoreChannel, 1)
go func() {
result := StoreResult{}
f(&result)
storeChannel <- result
close(storeChannel)
}()
return storeChannel
}
我想就为什么这可能出错或不会出错提出意见。如果可能的话,一种在并发环境中通过良好实践正确解决它的方法
解决方案
推荐阅读
- reactjs - 如何在 react-native-html-to-pdf 中动态添加值
- tsql - 基于列值复制行的 SQL 方法
- php - 2 个日期之间的日期范围 (Syntac)
- kotlin - “推断类型是 FragmentManager?但 FragmentManager 是预期的”移动到 androidX 后出现错误
- r - 在 R 的 data.table 中使用 ifelse 来赋值
- excel - 从excel中的单元格获取字符串数组 - VBA
- c# - 使用 `Task.Run` 或仅调用不带 `await` 的异步方法时触发并忘记
- android - JSON 文件中的“IllegalStateException:预期 BEGIN_OBJECT 但为 STRING”错误
- c# - 如何使用反射从实例中获取私有字典
- wordpress - 缺少 JPG 文件会减慢页面加载速度