【问题标题】:Spring boot / mongo wont create index with the index annotationSpring boot / mongo 不会使用索引注释创建索引
【发布时间】:2019-03-31 02:26:20
【问题描述】:

我有以下几点:

@Document(collection = "linkmetadata")
public class LinkMetaData {
@Indexed(unique = true)
private String url;
...
}

但每当它创建集合时,它不会为 url 字段创建任何索引,就像它只是忽略注释一样。知道这是为什么吗?

编辑:插入数据时也不会创建索引。当我尝试获取特定 url 的数据时,如果我两次输入相同的 url,它会抛出一个错误,即 url 键不是唯一的,但它不关心插入唯一键,因为没有索引..

【问题讨论】:

    标签: mongodb spring-boot


    【解决方案1】:

    在您的应用程序属性中使用auto-index-creation: true。在您的应用程序属性中添加波浪线

    spring.data.mongodb.auto-index-creation: true
    

    【讨论】:

    • 3.0以后需要启用这个属性
    • 你应该得到一枚奖牌
    • 这个属性是否在每次服务启动时创建(重新创建)索引,或者像数据迁移一样工作并且不重新创建已经存在?
    【解决方案2】:

    我发现了问题。我还有另一个集合,其中 url 字段标记为 unqiue。我必须在其中一个上指定索引的名称,否则它似乎认为索引已经存在,即使它位于两个不同的集合中

    @Indexed(name = "meta_url_index_unique", unique = true)
    private String url;
    

    【讨论】:

      【解决方案3】:

      编辑:这个答案是在作者更新他的问题之前

      我相信您需要在类声明顶部使用@Document 注释

      所以你的班级应该是

      @Document
      public class LinkMetaData {
      @Indexed(unique = true)
      private String url;
      ...
      }
      

      【讨论】:

      • 我做了我只是没有把所有东西都包括在上面,我更新了问题
      • 感谢您的澄清!你能包括你用来启用mongo的配置吗
      • 配置在我们的配置服务器上,我目前无法访问它。但它适用于同一服务中具有由注释创建的唯一索引的其他集合。
      • 我想通了,发布了答案
      • 非常感谢兄弟,不知道@Document 是必须的
      【解决方案4】:

      我也有同样的问题。解决我的问题的一个是从 mongo db 级别添加索引

      db.city.createIndex( { "name": 1 }, { unique: true } );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-09-24
        • 2019-06-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-18
        • 2017-12-17
        • 2020-09-13
        相关资源
        最近更新 更多