O primeiro:
const courses = await Course.find().populate("userId")
opera sobre a classe de modelo... ele encontra e preenche esses campos. Nenhum execPopulateNeeded.
O segundo:
const user = await User.findById("323223ad");
const user = await user
.populate('cart.items.courseId')
.execPopulate()
Opera sobre uma instância de uma classe (sobre uma instância de registro MongoDB).
Você precisa especificar quando executar o
populate()
... você pode encadear muitos populate()
s.