我目前使用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選項,但不是啓用的。 –