#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" })