【问题标题】:spring data mongodb multiple entity in same collection同一集合中的spring data mongodb多个实体
【发布时间】:2018-07-26 14:45:34
【问题描述】:

我的情况是,我必须将属于多个实体的数据存储在一个集合中。但是当我查询回来时,我不希望结果中有不需要的记录。我们如何使用弹簧来实现这一点?以下是我到目前为止所做的。

1.我在实体中给出了相同的集合名称,如下所示。

@Document(collection = "livingThings")
@Data
public class AnimalEntity {
    //contains id, type, bla, bla
}

@Document(collection = "livingThings")
@Data
public class HumanEntity {
  //contains id, gender, address
}

2。我创建独立的 mongoRepository 接口

public interface AnimalRepository implements MongoRepository<AnimalEntity, String> {

}

public interface HumanRepository implements MongoRepository<HumanEntity, String> {

}

3.而问题是

当我执行animalRepo.findAll 或humanRepo.findAll 时,我会得到集合中所有可用的记录。

4.我的期望

animalRepo.findAll 仅返回文档结构与 AnimalEntity 相同的那些记录。

非常感谢您抽出宝贵的时间和耐心参加本次提问。

【问题讨论】:

  • 你试过animalRepo.findAll。默认情况下,它只返回您在 Entity 类中映射的字段。
  • 是的,我试过了。它还没有奏效。我想弄清楚它是否需要任何额外的配置才能按照您提到的方式运行。

标签: java mongodb spring-data-mongodb


【解决方案1】:

MongoDB 自动将 _class 字段添加到集合中的实体。即使它不是最好的解决方案,你也可以试试这个:

@Query("_class:your package name here.AnimalEntity")
public AnimalEntity findAllAnimals();

【讨论】:

  • 您对 _class 的看法是正确的。而且我期望必须有一种方法可以告诉所有查询与接口实现中定义的实体类型匹配此类。如果我必须使用@Query 显式编写它,那将是未来维护和开发的开销。
  • 首先,抱歉打错了,我编辑了它。也许这可以帮助stackoverflow.com/questions/10421966/…
  • @SandeepMR 是的,你应该在每个文档中使用一个鉴别器字段,你应该这样做repo.findAllByDescrimator("human")
  • @Rookie007 - 如果您在示例中包含更多内容,将会非常有帮助。界面是什么样的?是否对大小写敏感?
  • @barrypicker 它的自定义 repo 方法 findAllBy&lt;your_field_name&gt;(String fieldName) 它将获取所有与 your_field 匹配的记录
猜你喜欢
  • 2019-02-16
  • 2016-07-06
  • 2016-09-24
  • 2019-02-14
  • 2016-01-07
  • 1970-01-01
  • 1970-01-01
  • 2019-12-05
  • 2018-05-05
相关资源
最近更新 更多