Spring data 在正确的集合中创建索引

Spring data 在正确的集合中创建索引,spring-data,spring-data-mongodb,Spring Data,Spring Data Mongodb,我用@Index(unique=true)注释文档,如下所示: 保存对象时,我指定一个自定义集合: MongoOperations mongoDb = ... mongoDb.save(document, "MyCollection"); 因此,我得到: “MyCollection”中的新文档 集合“ADocumentWithUniqueIndex”中的索引 如何在“MyCollection”中创建索引而不必在注释中显式指定它 背景: 在我们的用例中,默认集合名称太不明确。我们不能保证

我用@Index(unique=true)注释文档,如下所示:

保存对象时,我指定一个自定义集合:

MongoOperations mongoDb = ...

mongoDb.save(document, "MyCollection");
因此,我得到:

  • “MyCollection”中的新文档
  • 集合“ADocumentWithUniqueIndex”中的索引
如何在“MyCollection”中创建索引而不必在注释中显式指定它

背景:

  • 在我们的用例中,默认集合名称太不明确。我们不能保证,不会有两个文件具有相同的名称,但在不同的包中。因此,我们将包名称添加到集合中
  • 将文档映射到集合在基础结构组件中处理
  • 实现细节,如集合名称等,不应泄漏到单个文档中
  • 我知道这有点“抽象之上的抽象”的味道,但这是必需的,因为我们必须支持MongoDb和WindowsAzure blob存储。但现在不是了

这似乎是在基础设施组件中隐藏持久性细节的一种相当标准的方法。对该方法的任何评论都值得赞赏。

为要存储的对象定义集合,然后期望索引注释能够工作,这是一种不寻常的做法。这里有几个选项:

  • ADocumentWithUniqueIndex
    上使用
    @Document
    ,并手动配置集合名称。当然,这将导致该类的所有对象持久化到该集合中

  • 通过
    MongoOperations.indexOps()
    将索引手动创建到要使用的集合中。这将与在持久性操作期间手动确定集合名称的方法更加一致


  • 真的这么不寻常吗?将使用更多上下文更新问题。2.听起来很有希望,我会研究一下,看看我是否能用那种方式解决它!不寻常的是,人们将对象持久化到不同的集合中,而不是映射到的类,并且期望基于类的索引发生。好的。从一个天真的消费者的角度来看,我的思路是“定义一个文档,进一步限定某些字段,保存它”。这个模型让我相信,管理索引完全隐藏在CRUD操作背后。
    MongoOperations mongoDb = ...
    
    mongoDb.save(document, "MyCollection");