春季数据mongodb同一集合中的多个实体

时间:2018-07-26 14:45:35

标签: java mongodb spring-data-mongodb

我必须将属于多个实体的数据存储在一个集合中。但是当我查询然后返回时,我不想在结果中出现不需要的记录。我们如何使用spring做到这一点?下面是我到目前为止所做的。

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相同的那些记录。

非常感谢您的时间和耐心参加此查询。

1 个答案:

答案 0 :(得分:0)

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

# create function based on values
def get_values(row):

    if row['Type']  == 'GCP':
        return row['Key'][:3]
    elif row['Type'] == 'GTIN' and row['Key'][1:6] == '00000':
        return row['Key'][6:9]
    elif row['Type'] == 'GTIN' and row['Key'][2:7] != '00000':
        return row['Key'][1:4]

# convert to string
df['Key'] = df['Key'].astype(str)

# now use apply function
df['new'] = df.apply(get_values, axis=1)

   Type               Key  new
0  GTIN  1234589564652344  234
1   GCP  1564546545452344  156
2  GTIN  6000005645324234  564