Hello Divjot,
Thank you again for your help 
the struct for decoding is
type Place struct {
ID string `json:"id,omitempty" bson:"_id,omitempty"`
UserID primitive.ObjectID `json:"user_id,omitempty" bson:"user_id,omitempty"`
Name string `json:"name,omitempty" bson:"name,omitempty"`
Status Status `json:"status,omitempty" bson:"status,omitempty"`
Location geo.GeoJSON `json:"location,omitempty" bson:"location,omitempty"`
CreationDate time.Time `json:"creation_date,omitempty" bson:"creation_date,omitempty"`
}
the GeoJSON is:
type GeoJSON struct {
Type string json:"type,omitempty" bson:"type,omitempty"
Coordinates float32 json:"coordinates,omitempty" bson:"coordinates,omitempty"
Accuracy int json:"accuracy,omitempty" bson:"accuracy,omitempty"
}
I check the filter used by Find, which is search place by text:
jsonFilter = {"$and" : [{"$text":{"$search" : %q}}, {"status" : "active"}]}
The other difference is there is no skip and limit on Find. The code of Find looks like:
cur, err := collection.Find(context.TODO(), filter)
defer cur.Close(context.TODO())
places := place.Place{}
err = cur.All(context.TODO(), &places)
if err != nil {
return errors.InternalServerError("place_internal_error", err.Error())
}
after the cur.All, the places get all of the result and no error happens, so it is not returned from “place_internal_error”