diff --git a/registry.go b/registry.go index 949bc1f..15c9972 100644 --- a/registry.go +++ b/registry.go @@ -111,7 +111,7 @@ func makeRef(idx int, modelName string, fieldName string, ht reflect.Type) Refer panic("model name was empty") } -func parseTags(t reflect.Type, v reflect.Value) (map[string][]InternalIndex, map[string]Reference, map[string]gridFSReference, string) { +func parseTags(t reflect.Type, v reflect.Value, lastParsed string) (map[string][]InternalIndex, map[string]Reference, map[string]gridFSReference, string) { coll := "" refs := make(map[string]Reference) idcs := make(map[string][]InternalIndex) @@ -130,9 +130,9 @@ func parseTags(t reflect.Type, v reflect.Value) (map[string][]InternalIndex, map switch ft.Kind() { case reflect.Slice: ft = ft.Elem() - if _, ok := tags.Get("ref"); ok != nil { + if _, ok := tags.Get("ref"); ok == nil && lastParsed != ft.String() { if ft.Kind() == reflect.Struct { - ii2, rr2, gg2, _ := parseTags(ft, reflect.New(ft).Elem()) + ii2, rr2, gg2, _ := parseTags(ft, reflect.New(ft).Elem(), ft.String()) for k, vv := range ii2 { idcs[sft.Name+"."+k] = vv } @@ -285,7 +285,7 @@ func (r TModelRegistry) Model(mdl ...any) { if idx < 0 { panic("A model must embed the Document struct!") } - inds, refs, gfs, coll := parseTags(t, v) + inds, refs, gfs, coll := parseTags(t, v, "") if coll == "" { panic(fmt.Sprintf("a Document needs to be given a collection name! (passed type: %s)", n)) }