В MongoDB платформа агрегирования предоставляет мощные инструменты для манипулирования и анализа данных. Одним из ключевых операторов, используемых при агрегировании, является $filter, который позволяет фильтровать документы в массиве на основе заданных условий. В этой статье мы рассмотрим различные методы использования $filter с несколькими условиями, приведя примеры кода для каждого подхода.
Метод 1: использование массива условий
Оператор $filter может принимать массив условий, что позволяет фильтровать документы на основе нескольких критериев. Вот пример:
db.collection.aggregate([
{
$project: {
filteredArray: {
$filter: {
input: "$arrayField",
as: "item",
cond: {
$and: [
{ $gte: ["$$item.field1", 10] },
{ $lt: ["$$item.field2", 20] }
]
}
}
}
}
}
]);
Метод 2: объединение нескольких операторов $filter
Другой подход заключается в объединении нескольких операторов $filter вместе, каждый из которых фильтрует массив на основе определенного условия. Вот пример:
db.collection.aggregate([
{
$project: {
filteredArray: {
$filter: {
input: {
$filter: {
input: "$arrayField",
as: "item",
cond: { $gte: ["$$item.field1", 10] }
}
},
as: "item",
cond: { $lt: ["$$item.field2", 20] }
}
}
}
}
]);
Метод 3: использование $expr с $filter
Оператор $expr позволяет использовать выражения агрегирования внутри оператора $filter. Этот подход полезен, когда вам нужно выполнить сложные сравнения или вычисления. Вот пример:
db.collection.aggregate([
{
$project: {
filteredArray: {
$filter: {
input: "$arrayField",
as: "item",
cond: {
$and: [
{ $expr: { $gte: ["$$item.field1", { $multiply: [2, 5] }] } },
{ $lt: ["$$item.field2", 20] }
]
}
}
}
}
}
]);
В этой статье мы рассмотрели различные методы фильтрации документов в MongoDB с использованием оператора $filter с несколькими условиями. Мы обсудили использование массива условий, объединение нескольких операторов $filter и использование $expr с $filter. Эти методы обеспечивают гибкость и мощность, когда дело доходит до запроса и фильтрации данных в структуре агрегации MongoDB.
Не забудьте оптимизировать свои запросы с учетом вашего конкретного варианта использования, чтобы обеспечить эффективное выполнение и использовать весь потенциал возможностей агрегации MongoDB.