Доброго дня.
Есть коллекция, назовем ее Reports.
Пример документа коллекции Reports{
_id: '123123123',
name: 'Report 1',
userStatuses: [
{
userId: '1234567',
userEmail: 'email@foo.bar`
},
{
userId: '1234567',
userEmail: 'email@foo.bar`
},
],
createdAt: '2021-05-14 06:01:25.444Z'
}
Есть другая коллекция, UsersMap.
Пример документа коллекции UsersMap{
"_id" : "YGh2gkct9C4cNce4j",
"email" : "user@foo.bar",
"external_id" : "12345678",
"userAccessLevel" : "user",
"createdAt" : "2019-08-13T20:16:07.175Z"
}
Нужно выбрать из коллекции Reports все субдокументы внутри "userStatuses", с джойном ($lookup'ом) и с возможностью пагинации. То есть, чтобы запрос выбирал сперва все userStatuses, у которых в коллекции UsersMap роль "user", убрал дубликаты (distinct) и потом, по результату уже сделать skip & limit.
Сделал агрегацию через $lookup, однако
- выборка происходит по коллекции Reports, а нужно выбрать поддокументы
- дубликаты внутри userStatuses
Никак не могу понять, как сделать выборку из отдельных сущностей коллекции, да еще и с дистинктом, и с skip \ limit.
Запрос с агрегациейdb.Reports.rawCollection().aggregate(
[
{
$match: {
'createdAt': {
$gte: dateRangeStart.toDate(),
$lt: dateRangeEnd.toDate(),
},
}
},
{
$lookup: {
from: 'UsersMap',
as: 'map',
let: { userId: '$userStatuses.userId' },
pipeline: [
{
$match: {
$expr: {
$and: [
{ $eq: ['$_id', '$$userId'] },
{ $eq: ['$userAccessLevel', 'user'] },
]
}
}
}
]
},
]
);
Подскажите, как можно сделать такое в Монге? Куда копать?
Заранее спасибо.