From 5e8e65d03e0ca82e55a6b312e08144736c911f0e Mon Sep 17 00:00:00 2001 From: Nikita Tokarchuk Date: Mon, 8 Mar 2021 09:26:09 +0100 Subject: [PATCH] Use the only field type elem to check the content --- mongox/database/database.go | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/mongox/database/database.go b/mongox/database/database.go index e14f8b8..3d2816a 100644 --- a/mongox/database/database.go +++ b/mongox/database/database.go @@ -195,17 +195,20 @@ func (d *Database) createAggregateLoad(target interface{}, composed *query.Query continue } - isSlice := el.Field(i).Kind() == reflect.Slice + field := elType.Field(i) + fieldType := field.Type - typ := el.Field(i).Type() - if typ.Kind() == reflect.Slice { - typ = typ.Elem() + isSlice := fieldType.Kind() == reflect.Slice + if isSlice { + fieldType = fieldType.Elem() } - if typ.Kind() != reflect.Ptr { + + isPtr := fieldType.Kind() != reflect.Ptr + if isPtr { panic(fmt.Errorf("preload field should have ptr type")) } - lookupCollection := d.GetCollectionOf(reflect.Zero(typ).Interface()) + lookupCollection := d.GetCollectionOf(reflect.Zero(fieldType).Interface()) lookupVars := primitive.M{"selector": "$" + localField} lookupPipeline := primitive.A{ primitive.M{"$match": primitive.M{"$expr": primitive.M{"$eq": primitive.A{"$" + foreignField, "$$selector"}}}},