Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SpringDataMongoDB-在哪里以编程方式为Mongo集合创建索引?_Java_Spring_Mongodb_Spring Data Mongodb - Fatal编程技术网

Java SpringDataMongoDB-在哪里以编程方式为Mongo集合创建索引?

Java SpringDataMongoDB-在哪里以编程方式为Mongo集合创建索引?,java,spring,mongodb,spring-data-mongodb,Java,Spring,Mongodb,Spring Data Mongodb,要为集合创建索引(如本文所述),可以使用以下方法: mongoTemplate.indexOps(Person.class).ensureIndex(new Index().on("name",Order.ASCENDING)); 但是我应该把这个代码片段放在程序的什么地方呢 在相关存储库的构造函数中?我现在就是这样做的,而且很管用,但不知怎么的,我觉得这是个糟糕的设计 Mongo配置中的某个地方?我在这里还没有找到一个合适的方法来覆盖它如果您需要以编程方式进行,您可以创建新的Spring的@

要为集合创建索引(如本文所述),可以使用以下方法:

mongoTemplate.indexOps(Person.class).ensureIndex(new Index().on("name",Order.ASCENDING));
但是我应该把这个代码片段放在程序的什么地方呢

在相关存储库的构造函数中?我现在就是这样做的,而且很管用,但不知怎么的,我觉得这是个糟糕的设计


Mongo配置中的某个地方?我在这里还没有找到一个合适的方法来覆盖它

如果您需要以编程方式进行,您可以创建新的Spring的@Configuration并执行这样的初始化:

@Configuration
@DependsOn("mongoTemplate")
public class CollectionsConfig {

    @Autowired
    private MongoTemplate mongoTemplate;

    @PostConstruct
    public void initIndexes() {
        mongoTemplate.indexOps("collectionName") // collection name string or .class
            .ensureIndex(
                new Index().on("name", Sort.Direction.ASC)
        );
    }
}

您是否尝试过在person pojo中注释(@index)索引字段(名称)?这对你没用吗?或者这可能不是你想要的吗?@Veeram,这不是我想要的。我有两个类似的DB模型类,其中一个扩展了另一个,其中一个应该在2个字段上有一个复合唯一索引,而另一个应该在1个字段上只有一个简单唯一索引。因此,我为扩展类添加了
@compoundex
注释,并且必须以编程方式为扩展类添加索引。@Maxim您找到答案了吗?我也有同样的疑问。@NishantBhardwaz我只是把它放在存储库的构造函数中,没有更好的选项。这是控制器、服务还是存储库文件的一部分?这是一个单独的类,将在开始时调用。谢谢Dawid。我觉得把它作为MongoRepositoryInterface的一个内部类是很舒服的,假设注释
@DependsOn(“mongoTemplate”)正确吗在这种情况下不需要
,因为对
MongoTemplate
的自动连线依赖性意味着与该spring资源的
Dependesson
关系?我建议遵循此答案,以便
@Index
注释可以在不需要此选项的情况下工作。