我想创建一个非常简单的带注释的Java POJO并将其保存到mongodb中。基本上,它是:
@Component("vehicle")
@Scope("prototype")
@Document(collection = "vehicle")
@CompoundIndexes({
@CompoundIndex(name = "plateNumber_idx", def = "{ 'plateNumber' : 1 }", unique = true),
@CompoundIndex(name = "vin_idx", def = "{ 'vin' : 1 }", unique = true),
@CompoundIndex(name = "motorNumber_idx", def = "{ 'motorNumber' : 1 }", unique = true)
})
public class Vehicle {
private String plateNumber;
private String vin;
private String motorNumber;
... getters, setters, equal, hash etc. ....
}
它工作正常,但在我的情况下,我需要为motorNumber字段添加部分索引。原因是:没有必要填写此字段,因此该字段可以为null。但另一方面,不允许是两个或更多类似的motorNumber - 除非那些是null。我可以手动将部分索引添加到车辆集合中,但是通过注释来实现它将是更优雅的方式。例如,这是我的部分索引:
{"motorNumber" : {"$exists" : true}}
我的问题是:如何将此选项添加到@CompoundIndex?或者还有其他选择吗?
答案 0 :(得分:2)
我在尝试做同样的事情时发现了你的问题。
据我所知,spring-boot 1.5.x或2.0.x的spring-data-mongodb均不通过常规注释支持部分索引。
但是,spring-data-mongodb确实允许您以编程方式创建它们:
Index myIndex = new Index()
.background()
.unique()
.named("my_index_name")
.on("indexed_field_1", Sort.Direction.ASC)
.on("indexed_field_2", Sort.Direction.DESC)
.partial(PartialIndexFilter.of(
Criteria.where("criteria_field_1")
.is("BAR")));
DefaultIndexOperations indexOperations = new DefaultIndexOperations(mongoTemplate, "my_collection");
indexOperations.ensureIndex(myIndex);