无法弄清楚如何修改作为指针传递给接受空接口的函数的结构类型变量
我正在创建一种通过官方 go 驱动程序与 MongoDB 数据库配合使用的库。我传递一个结构指针,然后用数据库(MongoDB)中的数据填充该指针cursor.Decode。这对于单个文档来说效果很好,但是当我尝试返回文档数组时,只有父文档是正确的,但子文档(嵌入的)对于数组中的所有元素保持不变(可能存储引用而不是实际值)。
实际代码:
// passing model pointer to search function
result, _ := mongodb.Search(&store.Time{},
mongodb.D{mongodb.E("transdate",
mongodb.D{mongodb.E("$gte", timeSearch.DateFrom), mongodb.E("$lte", timeSearch.DateTo)})})
...
func Search(model interface{}, filter interface{}) (result ModelCollection, err error) {
collection := Database.Collection(resolveCollectionName(model))
var cursor *mongo.Cursor
cursor, err = collection.Find(Context, filter)
if err != nil {
log.Fatal(err)
}
for cursor.Next(Context) {
if err := cursor.Decode(model); err != nil {
log.Fatal(err)
}
modelDeref := reflect.ValueOf(model).Elem().Interface()
result = append(result, modelDeref)
}
return
}
这是我能想到的最接近的游乐场示例。我cursor.Decode()用自己的 Decoding 函数替换了 MongoDB,但这甚至没有更新父属性。孩子们还是一样
https://play.golang.org/p/lswJJY0yl80
预期的:
结果:[{A:1 子级:[{B:11}]} {A:2 子级:[{B:22}]}]
实际的:
结果:[{A:init 子级:[{B:22}]} {A:init 子级:[{B:22}]}]
ITMISS
相关分类