Для написания агрегации с популяцией данных в MongoDB вам понадобится использовать оператор $lookup.
Как пример, предположим, что у нас есть две модели: "User" и "Post". Каждый пользователь может создавать несколько постов, и каждый пост имеет создателя.
Первым шагом является создание агрегации в модели "User", где мы будем получать пользователей и их посты. Для этого нужно использовать оператор $lookup, чтобы связать модели "User" и "Post" по полю "userId".
const User = mongoose.model('User', { name: String }); const Post = mongoose.model('Post', { title: String, content: String, userId: { type: mongoose.Schema.Types.ObjectId, ref: 'User' } }); User.aggregate([ { $lookup: { from: 'posts', localField: '_id', foreignField: 'userId', as: 'posts' } } ]) .then(users => { console.log(users); }) .catch(error => { console.log(error); });
В результате выполнения этой агрегации мы получим массив объектов, где каждый объект будет представлять пользователя с его постами. Полям пользователя будут соответствовать свойства объекта, а посты пользователя будут доступны в свойстве "posts", которое будет содержать массив объектов, представляющих посты.
[ { _id: 'user1', name: 'John Doe', posts: [ { _id: 'post1', title: 'Post 1', content: 'Lorem ipsum dolor sit amet', userId: 'user1' }, { _id: 'post2', title: 'Post 2', content: 'Consectetur adipiscing elit', userId: 'user1' } ] }, { _id: 'user2', name: 'Jane Smith', posts: [ { _id: 'post3', title: 'Post 3', content: 'Sed do eiusmod tempor incididunt', userId: 'user2' } ] } ]
Таким образом, вы сможете получить полную информацию о пользователе и связанных с ним постах, используя агрегацию с популяцией данных в MongoDB.