code: func (t *Transaction) Find(c *Collection, id string, model Model) {
  	if c == nil {
  		t.setError(newNilCollectionError("Find"))
  		return
  	}
  	if err := c.checkModelType(model); err != nil {
  		t.setError(fmt.Errorf("zoom: Error in Find or Transaction.Find: %s", err.Error()))
  		return
  	}
  	model.SetModelID(id)
  	mr := &modelRef{
  		collection: c,
  		model:      model,
  		spec:       c.spec,
  	}
  	// Check if the model actually exists
  	t.Command("EXISTS", redis.Args{mr.key()}, newModelExistsHandler(c, id))
  	// Get the fields from the main hash for this model
  	args := redis.Args{mr.key()}
  	for _, fieldName := range mr.spec.fieldRedisNames() {
  		args = append(args, fieldName)
  	}
  	t.Command("HMGET", args, newScanModelRefHandler(mr.spec.fieldNames(), mr))
  }
docs: // Find retrieves a model with the given id from redis and scans its values
  // into model in an existing transaction. model should be a pointer to a struct
  // of a registered type corresponding to the Collection. find will mutate the struct,
  // filling in its fields and overwriting any previous values. Any errors encountered
  // will be added to the transaction and returned as an error when the transaction is
  // executed.