mustUpdate = async function(values, options) {
  const returningAsList = options.returningAsList;
  let minEffects = options.minEffects;
  if (isNaN(minEffects)) {
    minEffects = 1
  }
  delete(options.returningAsList);
  options.returning = true;
  const result = await this.update(values, options)
  if (!result || !Array.isArray(result) || result.length !== 2) {
    log4js.error('%s.mustUpdate(values:%s, options: %s) failed! result: %s', this.getTableName(), JSON.stringify(values), JSON.stringify(_.omit(options, ['transaction'])), result)
    throw new BackendError('update failed!')
  }

  let effects = 0
  let newValues = null;
  if (isMysql) {
    effects = result[1]
    if (returningAsList) {
      newValues = await this.findAll(options)
    } else {
      newValues = await this.findOne(options)
    }
  } else {
    effects = result[0];
    if (effects < minEffects) {
      log4js.error('%s.mustUpdate(values:%s, options: %s) failed! effects(%d) < 1', this.getTableName(), JSON.stringify(values), JSON.stringify(_.omit(options, ['transaction'])), result[0])
      throw new ArgsError('update failed! data not found')
    }
    if (returningAsList) {
      newValues = result[1];
    } else {
      newValues = result[1][0]; // returning one object.
    }
  }

  return {effects, newValues}
}
update object, if effects < options.minEffects, throw ArgsError.
@param {object} values
@param {object} options