Estoy usando MongoDB (Atlas) en mi proyecto y quiero usar agregado. pero tengo un problema para obtener datos.
Tengo dos colecciones.
users:{ username:'test', full_name:'test' } profiles:{ avatar:'' }Uso este código para buscar usuarios por consulta de entrada
const searchedUser = await User.aggregate([ { $search: { index: 'User', text: { query: `${query}`, path: { wildcard: '*', }, fuzzy: { maxEdits: 2, }, }, }, }, { $project: { full_name: true, username: true, }, }, { $lookup: { from: 'profiles', localField: 'user', foreignField: 'id', as: 'avatar', }, }, ]);pero obtengo todos los avatares de usuario en la matriz para cada usuario. Solo quiero ese avatar de usuario.
Debe agregar una proyección con $arrayElemAt después de su $lookup como esta:
const searchedUser = await User.aggregate([{ $search: { index: 'User', text: { query: `${query}`, path: { wildcard: '*', }, fuzzy: { maxEdits: 2, }, }, }, }, { $project: { full_name: true, username: true, }, }, { $lookup: { from: 'profiles', localField: 'user', foreignField: 'id', as: 'avatar', }, }, { $project: { full_name: true, username: true, avatar: { $arrayElemAt: ["$avatar", 0] } } } ]);