В настоящее время я использую Spring Data MongoDB для абстрагирования операций MongoDB и использования базы данных Azure DocumentDB с поддержкой протокола MongoDB. Я также столкнулся с этим, используя последний драйвер Java MongoDB.AzureDocumentDB Поддержка протокола MongoDB: не удалось создать индекс TTL
Существует проблема с установкой TTL-индекса в этом процессе.
Я получаю следующее исключение.
`Caused by: com.mongodb.CommandFailureException: { "serverUsed" : "****-****-test.documents.azure.com:****" , "_t" : "OKMongoResponse" , "ok" : 0 , "code" : 2 , "errmsg" : "The 'expireAfterSeconds' option has invalid value. Ensure to provide a nonzero positive integer, or '-1'` which means never expire." , "$err" : "The 'expireAfterSeconds' option has invalid value. Ensure to provide a nonzero positive integer, or '-1' which means never expire."}
at com.mongodb.CommandResult.getException(CommandResult.java:76)
at com.mongodb.CommandResult.throwOnError(CommandResult.java:140)
at com.mongodb.DBCollectionImpl.createIndex(DBCollectionImpl.java:399)
at com.mongodb.DBCollection.createIndex(DBCollection.java:597)
Это простое представление POJO, которое я использую.
public class Train{
@JsonProperty
private String id;
@JsonProperty("last_updated")
@Indexed(expireAfterSeconds = 1)
private Date lastUpdated;
// Getters & Setters
.
.
.
}
Это был мой первоначальный подход к инициализации индекса (посредством аннотации @Indexed).
Я также попытался инициализировать индекс с помощью:
mongoTemplate.indexOps(collection.getName())
.ensureIndex(new Index("last_updated", Sort.Direction.DESC)
.expire(1, TimeUnit.SECONDS));
Оба способа установки индекса броска того же execption.
Я также видел ошибку, говоря, что это можно сделать только в поле «_ts». Я думаю, что это связано с Azure DocumentDB, используя поле «_ts» для собственной TTL-операции. Поэтому я пробовал использовать следующие результаты с такими же результатами:
- Добавлено новое поле, длинное '_ts', в pojo и попыталось с аннотацией.
- Попытка установить индекс с помощью метода sureIndex с полем «_ts».
- Сделал то же самое, но изменил тип '_ts' на Date.
Я новичок в этих технологиях (DocumentDB и MongoDB), поэтому мне, вероятно, не хватает чего-то очевидного.
Любые мысли?
Я попытался это и не кости. Я также попробовал просто установить свойство private private ttl = 1. Пробовал комбинировать с параметрами индексирования манго. Не видя каких-либо поднятых исключений без установки индексов mongo, но функция ttl тоже не работает. –
Этот параметр, похоже, недоступен на поддерживаемой MongoDB db. У меня 2 дБ в моей учетной записи, с одной поддержкой Mongo, и без нее. Я вижу параметр TTL для базы данных, не поддерживающей протокол Mongo, но не для включенного. –