**¿Por qué este código no funciona? **
let posts = await postsCollection.aggregate([ {$match: {_id: new ObjectID(id)}}, {$addFields: {authorId: { $toObjectId: "$author"}}}, {$lookup: {from: "users", localField: "author", foreignField: "_id", as: "authorDocument"}} ]).toArray()A continuación debería funcionar. Supongo que postsCollection y los usuarios son la colección a la que desea unirse en función de authorId como clave común, pero se almacena como cadena en postsCollection y como _id en los usuarios.
let posts = await postsCollection.aggregate([ {$match: {_id: new ObjectID(id)}}, {$addFields: {authorId: { $toObjectId: "$author"}}}, {$lookup: {from: "users", localField: "authorId", foreignField: "_id", as: "authorDocument"}} ]).toArray()Nota: ha utilizado autor pero debe ser autorId