Mongodb правильная агрегация с $ facet - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть некоторый массив в БД. С полем 'rate' (значения: 0 - 100), projectId et c.

Мне нужен результат как:

{
  totalCount: 33,
  suspicious: [...],
  other: [...],
  totalSuspiciousCount: 22,
  totalOtherCount: 11,
}

подозрительно - это массив из 10 элементов или меньше с rate> 50

other - это массив из 10 или менее элементов со скоростью <= 50 </p>

Я создал несколько агрегированных запросов, но, думаю, есть способ их улучшить:

sails.models.observable.aggregate([
  { $match: { projectId: ObjectId(projectId) } },
  { $sort: { suspiciousRate: -1 } },
  {
    $facet: {
      totalCount: [{ $count: 'count' }],
      suspicious: [{ $match: { rate: { $gt: 50 } } }, { $limit: 10 }],
      other: [{ $match: { rate: { $lte: 50 } } }, { $limit: 10 }],
      totalSuspiciousCount: [{ $match: { rate: { $lte: 50 } } }, { $count: 'count' }],
      totalOtherCount: [{ $match: { rate: { $gt: 50 } } }, { $count: 'count' }]
    }
  }
])
...