Pierwszy:
const courses = await Course.find().populate("userId")
operuje na klasie modelu... znajduje i wypełnia te pola. Brak execPopulateNeeded.
Drugi:
const user = await User.findById("323223ad");
const user = await user
.populate('cart.items.courseId')
.execPopulate()
Działa na instancji klasy (na instancji rekordu MongoDB).
Musisz określić, kiedy wykonać populate()
... możesz połączyć wiele populate()
s.