在spring boot中使用mongodb从两个集合中获取数据

Posted

技术标签:

【中文标题】在spring boot中使用mongodb从两个集合中获取数据【英文标题】:Get data from two collection using mongodb in spring boot 【发布时间】:2021-12-11 11:56:15 【问题描述】:

以下查询中有两个集合(用户和部门)。我能够在 Mongo shell 中获取数据,但是当我尝试使用 Java 代码时,我只得到了一个数据集合。

db.users.aggregate([
  
  "$lookup":
     "from":"department",
     "localField":"user_department_id",
     "foreignField":"department_id"
    
   ]);

基本上,我只是想转换为Java项目并在Spring-Boot中使用Mongo模板。

这是服务。我总是在需要收集数据的同时获取用户数据。

public class UsersService 

@Autowired
private MongoTemplate mongoTemplate;

public void lookupOperation()
LookupOperation lookupOperation = LookupOperation.newLookup()
                    .from("department")
                    .localField("user_department_id")
                    .foreignField("department_id")
                    .as("departments");

Aggregation aggregation = Aggregation.newAggregation(lookupOperation);
    List<UsersDeptResult> results = mongoTemplate.aggregate(aggregation, "department", users.class).getMappedResults();
   
  

【问题讨论】:

你能告诉我我做错了什么 你能发布你的收藏并展示你的预期结果吗? 【参考方案1】:

你可以简单地使用

@Autowired
private MongoTemplate mongoTemplate;

public List<YOUR_CONVERTER_CLASS> test() 

    Aggregation aggregation = Aggregation.newAggregation(   
        lookup("department","user_department_id","department_id","departments")
    ).withOptions(AggregationOptions.builder().allowDiskUse(Boolean.TRUE).build());

    return mongoTemplate.aggregate(aggregation, mongoTemplate.getCollectionName(YOUR_COLLECTION.class), YOUR_CONVERTER_CLASS.class).getMappedResults();


【讨论】:

以上是关于在spring boot中使用mongodb从两个集合中获取数据的主要内容,如果未能解决你的问题,请参考以下文章

在 Spring-Boot 中,我们如何在同一个项目中连接两个数据库(Mysql 数据库和 MongoDB)?

如何使用 Spring Boot 和 MongoDB 从 JSON 列表中删除对象

如何在 Spring Boot 中使用特定日期范围和聚合从 MongoDB 数据库中检索数据?

我们可以用spring boot连接多个mongoDB数据源吗

MongoDB DBRef 列表在 Spring Boot 中返回 null

如何从 Spring Boot 更新 mongoDb 中的单个 JSON 字段