Получите данные из двух коллекций с помощью mongodb в весенней загрузке

#mongodb #spring-boot #mongodb-query #aggregation-framework #mongotemplate

Вопрос:

В приведенном ниже запросе есть две коллекции (пользователи и отдел). Я могу получить данные в оболочке Mongo, но когда я попытался использовать Java-код, я получил только один набор данных.

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

В принципе, я просто хочу преобразовать в проект Java и использовать шаблон Mongo в Spring-Boot.

Это и есть служба. Я всегда получаю данные пользователей, одновременно требуя и данных о сборе.

 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);  Listlt;UsersDeptResultgt; results = mongoTemplate.aggregate(aggregation, "department", users.class).getMappedResults();    } }  

Комментарии:

1. не могли бы вы, пожалуйста, подсказать мне, что я делаю не так

2. можете ли вы опубликовать свои коллекции и показать ожидаемый результат?

Ответ №1:

Вы можете просто использовать

 @Autowired private MongoTemplate mongoTemplate;  public Listlt;YOUR_CONVERTER_CLASSgt; 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();  }