Spring data 在正确的集合中创建索引
我用@Index(unique=true)注释文档,如下所示: 保存对象时,我指定一个自定义集合:Spring data 在正确的集合中创建索引,spring-data,spring-data-mongodb,Spring Data,Spring Data Mongodb,我用@Index(unique=true)注释文档,如下所示: 保存对象时,我指定一个自定义集合: MongoOperations mongoDb = ... mongoDb.save(document, "MyCollection"); 因此,我得到: “MyCollection”中的新文档 集合“ADocumentWithUniqueIndex”中的索引 如何在“MyCollection”中创建索引而不必在注释中显式指定它 背景: 在我们的用例中,默认集合名称太不明确。我们不能保证
MongoOperations mongoDb = ...
mongoDb.save(document, "MyCollection");
因此,我得到:
- “MyCollection”中的新文档
- 集合“ADocumentWithUniqueIndex”中的索引
- 在我们的用例中,默认集合名称太不明确。我们不能保证,不会有两个文件具有相同的名称,但在不同的包中。因此,我们将包名称添加到集合中
- 将文档映射到集合在基础结构组件中处理
- 实现细节,如集合名称等,不应泄漏到单个文档中李>
- 我知道这有点“抽象之上的抽象”的味道,但这是必需的,因为我们必须支持MongoDb和WindowsAzure blob存储。但现在不是了
这似乎是在基础设施组件中隐藏持久性细节的一种相当标准的方法。对该方法的任何评论都值得赞赏。为要存储的对象定义集合,然后期望索引注释能够工作,这是一种不寻常的做法。这里有几个选项:
ADocumentWithUniqueIndex
上使用@Document
,并手动配置集合名称。当然,这将导致该类的所有对象持久化到该集合中MongoOperations.indexOps()
将索引手动创建到要使用的集合中。这将与在持久性操作期间手动确定集合名称的方法更加一致真的这么不寻常吗?将使用更多上下文更新问题。2.听起来很有希望,我会研究一下,看看我是否能用那种方式解决它!不寻常的是,人们将对象持久化到不同的集合中,而不是映射到的类,并且期望基于类的索引发生。好的。从一个天真的消费者的角度来看,我的思路是“定义一个文档,进一步限定某些字段,保存它”。这个模型让我相信,管理索引完全隐藏在CRUD操作背后。
MongoOperations mongoDb = ...
mongoDb.save(document, "MyCollection");