code: func (n *node) Prefix(fieldName string, prefix string, to interface{}, options ...func(*index.Options)) error {
  	sink, err := newListSink(n, to)
  	if err != nil {
  		return err
  	}
  
  	bucketName := sink.bucketName()
  	if bucketName == "" {
  		return ErrNoName
  	}
  
  	ref := reflect.Indirect(reflect.New(sink.elemType))
  	cfg, err := extractSingleField(&ref, fieldName)
  	if err != nil {
  		return err
  	}
  
  	opts := index.NewOptions()
  	for _, fn := range options {
  		fn(opts)
  	}
  
  	field, ok := cfg.Fields[fieldName]
  	if !ok || (!field.IsID && field.Index == "") {
  		query := newQuery(n, q.Re(fieldName, fmt.Sprintf("^%s", prefix)))
  		query.Skip(opts.Skip).Limit(opts.Limit)
  
  		if opts.Reverse {
  			query.Reverse()
  		}
  
  		err = n.readTx(func(tx *bolt.Tx) error {
  			return query.query(tx, sink)
  		})
  
  		if err != nil {
  			return err
  		}
  
  		return sink.flush()
  	}
  
  	prfx, err := toBytes(prefix, n.codec)
  	if err != nil {
  		return err
  	}
  
  	return n.readTx(func(tx *bolt.Tx) error {
  		return n.prefix(tx, bucketName, fieldName, cfg, sink, prfx, opts)
  	})
  }
docs: // Prefix returns one or more records whose given field starts with the specified prefix.