我目前使用Spring Data MongoDB来抽象MongoDB操作,并将Azure DocumentDB数据库与MongoDB协议支持结合使用。我也碰到过使用最新的MongoDB Java驱动程序本身。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操作。所以我尝试了以下相同的结果:
- 向pojo添加了一个新字段Long'_ts',并使用注释进行尝试。
- 试图使用'_ts'字段通过ensureIndex方法设置索引。
- 做了上述相同的事情,但将'_ts'的类型更改为日期。
我不熟悉这些技术(DocumentDB和MongoDB),所以我可能会错过某些明显的东西。
有什么想法?
我尝试这一点,并没有骰子。我也试过设置'private int ttl = 1'属性。尝试与mongo索引选项结合使用。在没有设置mongo索引的情况下没有看到任何引发的异常,但ttl函数似乎也没有工作。 –
该选项在MongoDB启用的数据库中似乎不可用。我的帐户设置中有2分贝,其中一个支持Mongo,另外一个没有。我看到非Mongo协议启用数据库的TTL选项,但不是启用的。 –