ms-dred
@ms-dred
Вечно что то не то и что то не так...

Как получить по одному документу принадлежащие каждому пользователю?

Есть две коллекции 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+ из возможных
  • Вопрос задан
  • 209 просмотров
Решения вопроса 1
ms-dred
@ms-dred Автор вопроса
Вечно что то не то и что то не так...
Отдых помогает =)
$group: {
                    _id: "$idUser",
                    documents: {
                        $first: {
                            _id: "_id",
                            name: '$name',
                            idUser: "$idUser"
                        }
                    }
                }
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы