code: func (q *TransactionQuery) Run(models interface{}) {
  	if q.hasError() {
  		q.tx.setError(q.err)
  		return
  	}
  	if err := q.collection.spec.checkModelsType(models); err != nil {
  		q.tx.setError(err)
  		return
  	}
  	idsKey, tmpKeys, err := generateIDsSet(q.query, q.tx)
  	if err != nil {
  		q.tx.setError(err)
  		return
  	}
  	limit := int(q.limit)
  	if limit == 0 {
  		// In our query syntax, a limit of 0 means unlimited
  		// But in redis, -1 means unlimited
  		limit = -1
  	}
  	sortArgs := q.collection.spec.sortArgs(idsKey, q.redisFieldNames(), limit, q.offset, q.order.kind == descendingOrder)
  	q.tx.Command("SORT", sortArgs, newScanModelsHandler(q.collection.spec, append(q.fieldNames(), "-"), models))
  	if len(tmpKeys) > 0 {
  		q.tx.Command("DEL", (redis.Args{}).Add(tmpKeys...), nil)
  	}
  }
docs: // Run will run the query and scan the results into models when the Transaction
  // is executed. It works very similarly to Query.Run, so you can check the
  // documentation for Query.Run for more information. The first error encountered
  // will be saved to the corresponding Transaction (if there is not already an
  // error for the Transaction) and returned when you call Transaction.Exec.