我用 @Index(unique = true) 注释文档,如下所示:
public class ADocumentWithUniqueIndex {
private static final long serialVersionUID = 1L;
@Indexed(unique = true)
private String iAmUnique;
public String getiAmUnique() {
return iAmUnique;
}
public void setiAmUnique(String iAmUnique) {
this.iAmUnique = iAmUnique;
}
}
保存对象时,我指定一个自定义集合:
MongoOperations mongoDb = ...
mongoDb.save(document, "MyCollection");
结果我得到:
- “MyCollection”中的新文档
- 集合“ADocumentWithUniqueIndex”中的索引
如何在“MyCollection”中创建索引,而不必在注释中显式指定它?
背景:
- 在我们的用例中,默认集合名称过于模糊。我们不能保证不会有两个同名但位于不同包中的文档。因此我们将包名称添加到集合中。
- 将文档映射到集合是在基础结构组件中处理的。
- 集合名称等实现细节不应泄漏到各个文档中。
- 我知道这有点“抽象之上的抽象”的味道,但这是必需的,因为我们必须支持 MongoDb 和 Windows Azure blob 存储。不过现在不再了...
这似乎是在基础设施组件中隐藏持久性细节的相当标准的方法。对于该方法的任何评论也表示赞赏。
定义要存储的对象的集合然后期望索引注释起作用是不寻常的。这里有几个选项:
Use @Document
on ADocumentWithUniqueIndex
并手动配置集合名称。当然,这将导致该类的所有对象被持久化到该集合中。
通过手动创建索引MongoOperations.indexOps()
进入您想要使用的集合。这与您在持久性操作期间手动确定集合名称的方法更加一致。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)