title: Why is execPopulate method required in mongoose for populating an existing document?
body: <p>I know the syntax of it and how it works, but I cannot understand the internal workings, why does a method chaining require another method at one time, but doesn't some other time?</p>
  <p>This code works fine</p>
  <pre><code>const cart = await Carts.findById(cartId).populate('product');
  </code></pre>
  <p>But this code does not</p>
  <pre><code>let cart = await Carts.findById(cartId);
  cart = await cart.populate('product');
  </code></pre>
  <p>And to make it work, we use the <code>execPopulate</code> method which works like this.</p>
  <pre><code>let cart = await Carts.findById(cartId);
  cart = await cart.populate('product').execPopulate();
  </code></pre>
  <p>Now, as far as I have read method chaining in javascript, the code should run fine without the <code>execPopulate</code> method too. But I cannot seem to understand why populate does not work on existing mongoose objects.</p>