Невозможно удалить объекты из командной строки - PullRequest
0 голосов
/ 14 декабря 2018

Я пытаюсь запустить импорт в non prod env, используя данные, экспортированные prod, но не знаю, как удалить все дочерние элементы из командной строки перед началом импорта.Поскольку мы создаем поддельные данные для нагрузочного тестирования, важно удалить все виды и выполнить новый импорт.Я могу удалить виды вручную из администратора хранилища данных, но хотел бы сделать это программно.

1 Ответ

0 голосов
/ 17 декабря 2018

Я надеюсь, что приведенный ниже код будет полезным.Вы можете следовать нижеприведенному подходу, чтобы проблематично удалить все сущности из вида.Сначала мы выбираем все сущности из вида и заполняем список ключей, а затем выбираем каждую сущность с помощью ключа и удаляем ее из хранилища данных.

Шаг 1: Получить все ключи из хранилища данных

List<String> googleDSKeyList = new ArrayList<String>();
StructuredQuery<Entity> query = Query.newEntityQueryBuilder().setKind(kind).build();
    QueryResults<Entity> results = datastore.run(query);

results.forEachRemaining(entity -> googleDSKeyList.add(String.valueOf(entity.getKey().getNameOrId())));

Шаг 2: Для каждого объекта передать ключ методу удаления.

googleDSKeyList.forEach(keyId-> deleteEntity(keyId));

Шаг 3:Чтобы удалить объект, выполните select и затем удалите.

public void deleteEntity(String KEY_VALUE) {

    Query<Entity> query = Query
            .newGqlQueryBuilder(Query.ResultType.ENTITY,
                    "SELECT * WHERE __key__ HAS ANCESTOR KEY (" + KIND_NAME + ", '" + PRIMARY_KEY + "')")
            .setAllowLiteral(true).build();

    QueryResults<Entity> results = datastore.run(query);
    if (results.hasNext()) {
        Entity rs = results.next();
        datastore.delete(rs.getKey());
        LOGGER.info("Successfully Deleted KEY # : " + KEY_VALUE);
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...