在正确的集合中创建索引

2024-05-23

我用 @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 存储。不过现在不再了...

这似乎是在基础设施组件中隐藏持久性细节的相当标准的方法。对于该方法的任何评论也表示赞赏。


定义要存储的对象的集合然后期望索引注释起作用是不寻常的。这里有几个选项:

  1. Use @Document on ADocumentWithUniqueIndex并手动配置集合名称。当然,这将导致该类的所有对象被持久化到该集合中。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在正确的集合中创建索引 的相关文章

随机推荐