Как построить сложный запрос фильтра, используя агрегацию. MongoDB

#mongodb #mongodb-query #aggregation-framework #match

#mongodb #mongodb-запрос #aggregation-framework #совпадение

Вопрос:

У меня есть коллекция «оценок», каждая оценка со следующей структурой:

введите описание изображения здесь

И у меня есть список меток для фильтров с этой примерной структурой:

 [{ LabelId="5fe34b13f0031e1078e08b5c", Value="BOL"}, 
{ LabelId="5fe34b13f0031e1078e08b5c", Value="LGV"}]
 

Что я хочу сделать, так это отфильтровать коллекцию «оценки», чтобы получить только оценки, которые имеют EvaluationResults, которые имеют EvaluatedLabels, соответствующие тому же идентификатору метки и значению фильтров объектов в списке выше.

Другими словами, мне нужны оценки, которые оценивали заданные комбинации меток / значений.

Как бы я это сделал с помощью языка запросов mongodb, используя aggregation framework?

Ответ №1:

Вы можете создать составной индекс для обоих полей следующим образом:

 db.evaluations.createIndex({ "EvaluationResults.EvaluationLabels.LabelId":1, "EvaluationResults.EvaluationLabels.Value":1 })
 

и фильтруйте для конкретной оценки следующим образом:

 db.evaluations.find({ "EvaluationResults.EvaluationLabels.LabelId":"5fe", "EvaluationResults.EvaluationLabels.Value":"BOL" })