在正确的集合中创建索引

时间:2014-05-29 20:34:35

标签: spring-data spring-data-mongodb

我使用@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 个答案:

答案 0 :(得分:1)

为要存储的对象定义集合并期望索引注释起作用是很不寻常的。你有几个选择:

  1. @Document上使用ADocumentWithUniqueIndex并手动配置集合名称。这将导致该类的所有对象保持在该集合中。

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