我正在使用 MongoDb 运行 Springboot3,我不知道如何设置一个具有两个字段的集合,这两个字段在组合中必须是唯一的。
如果没有在集合上设置唯一复合索引,则没有效果。 我本以为在 Java 实体上声明它就足够了。
一些代码:
@Document("Asset")
@CompoundIndexes({
@CompoundIndex(def = "{'userId': 1, 'name': 1}", unique = true)
})
public class Asset {
@Id
private String id;
private String userId;
private String name;
...
字段
userId
和 name
在集合中必须是唯一的。
那没有任何效果。我的 MongoConfiguration 上确实有一个 @EnableMongoRepositories
:
@Configuration
@EnableMongoRepositories
@Slf4j
public class MongoConfiguration {
private final String mongoDatabaseName = "testNoSql";
private final String mongoDatabaseAddress = "localhost:27017";
另一方面,我正在使用
MongoDb Compass
来查看数据库部分发生了什么。Asset
我希望声明一个额外的索引,但事实并非如此。我手动创建一个:
效果是它不像复合键,而是像简单的字段唯一键。带有
userId
的条目只能存在一次,无论 name
设置为什么。
到目前为止,通过阅读文档和提示,我预计
@EnableMongoRepositories
将提供在数据库端自动构建复合键(就像 @Id 所做的那样)。有人可以启发我吗?预先感谢您。
您可以为
id
和 userId
创建另一个类。将该类作为对象添加到您的 Asset
类中,并为该对象添加注释 @id
。
参考:https://www.baeldung.com/spring-data-mongodb-composite-key