Есть две коллекции db.users и db.groups, при выборке необходимо получить по одному документу пользователя (db.users)
К примеру db.groups содержит следующие данные
{
_id: id1,
idUser: 'ObjectID db.users._id' // String (сюда помещаю ID пользователя)
name: 'Название группы',
createdAt: 'Дата создания группы'
}
Есть массив с идентификаторами пользователей [id1, id2, id3, id4]
У каждого пользователя может находится по 100+ групп, а мне нужно получить всего 1, т.е. на выходе массив по одной группе у каждого пользователя. И нужно выбрать самую старую группу по полю createdAt
Как я понял aggregate мне в помощь, но чет не могу сообразить
Groups
.aggregate([
{
$project: {
_id: 1,
name: 1,
createdAt: 1 // Дата создания группы
}
}, {
$match: {
idUser: {
$in: ['id1', 'id2', 'id3', 'id4'] // Получу все группу принадлежащие пользователям
}
}
}, {
$sort: {
createdAt: 1
}
},{
$group: {
_id: null,
documents: {
$push: {
name: '$name'
}
}
}
}
])........
Как правильно собрать $group, чтобы в поле documents содержались группы с уникальным idUser, т.е. на 5 пользователей нужно получить 5 групп, а не 500+ из возможных