mongodb - 使用 spring 数据的复合唯一索引不起作用
mongodb - compound unique index using spring data not working
我正在尝试使用 spring 数据在 mongodb 中创建唯一的复合索引。
但是我看到索引是 not 创建的并且 duplicate document 在数据库中创建。
我的实体class:
@Document
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@CompoundIndexes(
@CompoundIndex(name = "daybook_index", def = "{'date' : 1, 'vehicleNumber' : 1}", unique = true)
)
public class Daybook {
private String date;
private String vehicleNumber;
private String unit;
}
我正在使用 repository.insert()
方法创建文档。
当我在 mongo express 中看到时,我只看到在 _id
上创建了一个索引,并且未创建在实体 class 中定义的索引。
是 spring 数据中的错误还是我做错了什么?
P.S.: 我也尝试在 运行 应用程序之前删除该集合,但没有帮助。
从 Spring Data MongoDB 3.0 开始,默认情况下自动创建索引是关闭的。
要打开它,您可以使用适当的标志覆盖 MongoConfigurationSupport 中的方法:
public class MongoConfiguration extends AbstractMongoClientConfiguration {
.....
@Override
protected boolean autoIndexCreation() {
return true;
}
}
否则您可以使用适当的说明创建索引。
mongoOperations.indexOps(Daybook.class).ensureIndex(new Index().on("date", Direction.ASC).on("vehicleNumber", Direction.ASC).unique());
正如@Saxon 提到的:
Spring Data MongoDB 3.0, automatic index creation is turned off by default.
我可以通过在 application.properties
中添加 spring 数据配置来创建索引,而不是添加代码
spring.data.mongodb.auto-index-creation=true
我正在尝试使用 spring 数据在 mongodb 中创建唯一的复合索引。
但是我看到索引是 not 创建的并且 duplicate document 在数据库中创建。
我的实体class:
@Document
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@CompoundIndexes(
@CompoundIndex(name = "daybook_index", def = "{'date' : 1, 'vehicleNumber' : 1}", unique = true)
)
public class Daybook {
private String date;
private String vehicleNumber;
private String unit;
}
我正在使用 repository.insert()
方法创建文档。
当我在 mongo express 中看到时,我只看到在 _id
上创建了一个索引,并且未创建在实体 class 中定义的索引。
是 spring 数据中的错误还是我做错了什么?
P.S.: 我也尝试在 运行 应用程序之前删除该集合,但没有帮助。
从 Spring Data MongoDB 3.0 开始,默认情况下自动创建索引是关闭的。 要打开它,您可以使用适当的标志覆盖 MongoConfigurationSupport 中的方法:
public class MongoConfiguration extends AbstractMongoClientConfiguration {
.....
@Override
protected boolean autoIndexCreation() {
return true;
}
}
否则您可以使用适当的说明创建索引。
mongoOperations.indexOps(Daybook.class).ensureIndex(new Index().on("date", Direction.ASC).on("vehicleNumber", Direction.ASC).unique());
正如@Saxon 提到的:
Spring Data MongoDB 3.0, automatic index creation is turned off by default.
我可以通过在 application.properties
spring.data.mongodb.auto-index-creation=true