java - AzureDocumentDB MongoDB协议(protocol)支持: Failing to create TTL index

标签 java mongodb spring-data azure-cosmosdb ttl

我目前正在使用 Spring Data MongoDB 来抽象 MongoDB 操作,并使用支持 MongoDB 协议(protocol)的 Azure DocumentDB 数据库。我在使用最新的 MongoDB Java 驱动程序时也遇到过这个问题。

在此过程中设置 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));

两种设置索引的方法都会抛出相同的异常。

我还看到一个错误,指出它只能在“_ts”字段上完成。我认为这是由于 Azure DocumentDB 使用“_ts”字段进行其自己的 TTL 操作。所以我尝试了以下方法,得到了相同的结果:

  • 向 pojo 添加了一个新字段 Long '_ts',并尝试使用注释。
  • 尝试通过 EnsureIndex 方法和“_ts”字段设置索引。
  • 执行与上述相同的操作,但将“_ts”的类型更改为 Date。

我对这些技术(DocumentDB 和 MongoDB)很陌生,所以我可能错过了一些明显的东西。

有什么想法吗?

最佳答案

重新审视我不久前发布的问题,以我找到的解决方案进行回复。

请注意,自从我发布此问题以来,DocumentDB 已重命名为 CosmosDB。

Spring 框架或 CosmosDB/DocumentDB 平台端的类型转换存在问题。尽管文档说它需要一个整数,但实际上您需要向它传递一个 double 值。

我正在使用以下内容并且它有效

dcoll.createIndex(new BasicDBObject("_ts", 1)
                    , new BasicDBObject("expireAfterSeconds", 10.0));

关于java - AzureDocumentDB MongoDB协议(protocol)支持: Failing to create TTL index,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42121363/

相关文章:

java - 从不同的应用程序读取 Redis 中的数据

java - 我如何更改我的代码,以便如果有第二个输入,它将添加到我的直方图上?

java - 如何将这个 while 循环转换为递归?

node.js - MongoDB 不返回文档中的空对象

mongodb - Golang mongo驱动性能

java - 实体需要什么状态才能触发【更新】操作?

java - ArrayDeque 添加多个元素

java - 将音量应用于产生静电/噪音的 PCM 样本?

C# MongoDB LINQ : Cannot query nested list

java - 如何合并 springframework.beans.factory.UnsatisfiedDependencyException 堆栈跟踪?