Удаление старых записей из хранилища данных

#java #if-statement #google-cloud-datastore

#java #if-оператор #google-облако-хранилище данных

Вопрос:

Я использую java для запроса облачного хранилища данных Google, чтобы выяснить, была ли запись там более одного дня, и если да, то удалите запись. У меня есть что-то вроде этого:

     if (requestUploaded == true) {

     datastore.delete(row_to_delete);
  

Я хочу добавить логику, в которой:

а) Я получаю текущее время.

б) Затем проверьте, является ли запись хранилища данных старше одного дня, если да, то удалите.

Спасибо!

Ответ №1:

Основываясь на вашем объяснении проблемы, я не знаю ни одного встроенного метода для определения времени создания в объектах облачного хранилища данных, поэтому мое объяснение предполагает, что у вас есть created свойство в вашей сущности.

Получение текущего времени

Вы можете создать новый Date объект без каких-либо аргументов, чтобы получить текущую дату и время:

 import java.util.Date;

Date d = new Date();
  

При желании вы можете использовать Timestamp.now() при создании своей сущности, согласно документации:

 Entity task = Entity.newBuilder(taskKey)
    .set("category", "Personal")
    .set("created", Timestamp.now())
    .set("description",
      StringValue.newBuilder("Learn Cloud Datastore").setExcludeFromIndexes(true).build())
    .build();
  

Сравнение времени создания объекта с текущей датой и временем

Вы можете использовать следующий пример кода для извлечения всех объектов, created свойство которых, которое является датой и временем создания объекта, меньше текущего времени, которое определяется Timestamp.now()

 Query<Entity> query = Query.newEntityQueryBuilder()
    .setKind("Person")
    .setFilter(PropertyFilter.lt("created", Timestamp.now()))
    .build();
QueryResults<Entity> results = datastore.run(query);
while (results.hasNext()) {
  Entity currentEntity = results.next();
  System.out.println(currentEntity.getString("name"));
}
  

Вы можете обратиться к документации оператора PropertyFilter для получения более подробной информации о фильтрации.

Удаление сущности

Наконец, вы можете удалить объект по заданному ключу:

 datastore.delete(taskKey);