当前位置: 首页 > 知识库问答 >
问题:

如何用Spring-Data-MongoDB在实体中设置@TextIndex名称

阎晗日
2023-03-14

我有一个实体人物,由音乐家和政治家继承,还有一个存储库人物存储库。

我正在尝试使用PersonRepository.save(..)将所有三个实体保存到MongoDB的集合“Person”中但是Spring-Data-MongoDB将其保存到3个单独集合“Person”、“Musician”和“Politician”中。

Java代码:

@Document
public class Person {
    @Id private String id;

    @Indexed private String name;

    @TextIndexed private String biography;
}

@Document  
public Musician extends Person {
    private String something;
}

@Document  
public Politician extends Person {
    private String somethingElse;
}

@Repository
public interface PersonRepository extends CrudRepository<User, String> {
}

在阅读了一些帖子之后,我不得不为存储库的所有三个实体将集合名称设置到注释@document(collection=“person”)中,以便将其保存到同一个集合中。

它工作得很好,但当我检查MongoDB中的索引时,不知怎么地,我会得到TextIndex是以保存的最后一个实体类命名的。

MongoDB shell:

db.person.getIndexes()
[
    {
        "v" : 1,
        "key" : {
                "_id" : 1
        },
        "name" : "_id_",
        "ns" : "test.person"
    },
    {
        "v" : 1,
        "key" : {
                "_fts" : "text",
                "_ftsx" : 1
        },
        "name" : "Musician_TextIndex",
        "ns" : "test.person",
        "weights" : {
                "description" : 1,
                "name" : 10
        },
        "default_language" : "english",
        "language_override" : "language",
        "textIndexVersion" : 3
    }
]

是否有任何方法可以设置TextIndex名称,而不是以我正在保存的实体类命名它。试着搜索能找到任何。

共有1个答案

苏彦君
2023-03-14

目前,无法使用基于注释的设置来设置textindex的索引名称。为此,请通过模板使用indexoperations手动设置文本索引。

template.indexOps(Person.class)
  .ensureIndex(
     new TextIndexDefinitionBuilder()
       .named("YourIndexNameHere")
       .onField("biography")
       .build());
 类似资料:
  • 有人尝试过在Spring-Boot中禁用mongodb的自动配置吗? 我正在使用spring-data-mongoDB试用spring-boot;使用基于java的配置;使用Spring-Boot1.2.1.Release,我导入了spring-boot-starter-web及其父pom来进行依赖关系管理。我还导入了spring-data-mongodb(也尝试了spring-boot-star

  • 我开始学习使用实体图来减少N1问题。但我面临一个问题,findAll方法返回重复数据。 < code >人 我创建一个 pom.xml代码 我的代码出了什么问题?方法 都不能使用 EntityGraph?

  • 我有一套文件。每个文档有两个字段—“代码”和“状态”。我的mongodb集合包含以下文档: 我想按每个代码的状态查找计数。我想要的输出如下所示: 如何使用spring data mongodb实现这一点?我对mongodb很陌生。 更新我已成功编写mongodb查询。这是: 有人能帮助您在spring data mongodb中编写此查询吗?

  • 我写了一个应用程序,使用Spring MongoRepository连接到产品销售的集合,其中包含所有产品的销售数据。 现在,我面临一个问题,因为我现在有多个产品销售集合,而不是一个集合,每个集合包含一个产品。所有集合的结构仍然相同,但现在每个集合的名称类似于“Sales_123”、“Sales_456”,其中数字后缀是产品Id。 这意味着我不能再使用文档注释来指定集合名称。我仍然可以在运行时将集

  • 我是Spring Data MongoDB的新手,我正在尝试用Spring Data MongoDBJava实现聚合查询。我尝试过从这个问题中搜索,并使用进行搜索,但仍然没有结果。 我的数据格式: 我的查询: 这是我在Javascript后端使用的查询,我可以用Mongoose很容易地做到这一点。然而,我对它的Java实现有一些困难。 当我尝试运行此程序时,会出现以下错误: 当我删除从组聚合中,我

  • 我正在浏览Spring Data MongoDB参考文档,发现示例有点过于简单。 特别是,我试图了解如何在并发环境中处理陈旧数据。例如,假设我有以下实体: 但是我有点担心,如果我想做的每种类型的更新都需要一个新的方法,那么我的存储库接口将无法控制地增长。 我意识到我实际上还没有提出一个问题,所以现在开始了:在MongoDB中使用Spring数据设计应用程序的最佳实践是什么?