 <p>From the <a href="http://mongoosejs.com/docs/guide.html#id">documentation</a>:</p> <blockquote> <p>Mongoose assigns each of your schemas an id virtual getter by default which returns the documents _id field cast to a string, or in the case of ObjectIds, its hexString.</p> </blockquote> <p>So, basically, the <code>id</code> getter returns a string representation of the document's <code>_id</code> (which is added to all MongoDB documents by default and have a default type of <code>ObjectId</code>).</p> <p>Regarding what's better for referencing, that depends entirely on the context (i.e., do you want an <code>ObjectId</code> or a <code>string</code>). For example, if comparing <code>id</code>'s, the string is probably better, as <code>ObjectId</code>'s won't pass an equality test unless they are the same instance (regardless of what value they represent).</p>