Возможно ли реализовать все так?
Есть две коллекции
Первая: Collections
var schema = new Schema({
name: { type: String },
owner: { type: mongoose.Schema.Types.ObjectId, ref: 'Users' }, // владелец
photos: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Photos' }],
public: { type: Number, default: 1 },
createdAt: { type: Date, default: Date.now }
})
Вторая: Photos
var schema = new Schema({
createdAt: { type: Date, default: Date.now },
owner: { type: mongoose.Schema.Types.ObjectId, ref: 'Users', required: !0 },
image: { type: String, required: !0 },
domain: { type: String, default: config.domain.photos },
});
Что там, что там owner Users._id
Мне нужно получить все данные пользователя из Collections, для этого я делаю следующее:
Collections.aggregate([
{ $match: { owner: request.owner } },
{ $sort: { createdAt: -1 } },
{ $lookup: { from: 'photos', localField: 'photos', foreignField: '_id', as: 'photos' } },
{
$project: {
_id: { $toString: "$_id" },
name: 1,
photos: {
"$map": {
input: "$photos",
as: "p",
in: { $concat: ['$$p.domain', 'folder/', '$$p.image'] } }
}
}
}
])
И на выходе получаю правильный объект
{
name: 'Папка',
_id: '5d557777ab6666e77777e',
photos: [
'https://site/folder/img.jpg',
'https://site/folder/img2.jpg''
]
}
Но поле photos содержит кучу записей, а мне нужно всего лишь одну, чтобы было так
{
name: 'Папка',
_id: '5d557777ab6666e77777e',
photos: 'https://site/folder/img.jpg',
}
Или чтобы photos был массивом с одним элементом.