Estoy tratando de usar la siguiente agregación:
[ {$unwind: '$names'}, {$sort: {'names.changed_at': -1}}, {$group: {_id: '$_id', names: {$push: {value: '$names.value', changed_at: '$names.changed_at'}}}}, {$limit: 3}, { $lookup: { from: 'users', localField: 'id', foreignField: 'id', as: 'user', }, }, {$unwind: '$user'}, { $project: { _id: 0, old_name: {$first: '$names'}, user: {avatar_url: 1, current_tag: 1}, }, } ]
Con $búsqueda y $grupo devuelve []. Cuando elimino $lookup o $group, funciona y da el resultado esperado.
¿Cómo puedo solucionar esto?
Está tratando de usar el campo de id
para la $lookup
, pero después de esta etapa $group
:
{ $group: { _id: '$_id', names: { $push: { value: '$names.value', changed_at: '$names.changed_at' } } } },
La estructura del documento es:
{ _id: ObjectId, names: { value: string, changed_at: Date }[] }
Como puede ver, no hay un campo de id
.
Si se trata de un error tipográfico, simplemente cambie id
a _id
. si esto no es un error tipográfico, debe "guardar" el campo de id
en la etapa $group
, así:
{ $group: { _id: '$_id', names: {$push: {value: '$names.value', changed_at: '$names.changed_at'}}, id: {$first: "$id"} } }