#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(); }