MongoDB CRUD operations (insert
, update
, find
, remove
) all operate on top-level documents exclusively — although of course you can filter by fields in embedded documents. Embedded documents are always returned within the parent document.
The _id
field is a required field of the parent document, and is typically not necessary or present in embedded documents. If you require a unique identifier, you can certainly create them, and you may use the _id
field to store them if that is convenient for your code or your mental model; more typically, they are named after what they represent (e.g. “username”, “otherSystemKey”, etc). Neither MongoDB itself, nor any of the drivers will automatically populate an _id
field except on the top-level document.
Specifically in Java, if you wish to generate ObjectId values for the _id
field in embedded documents, you can do so with:
someEmbeddedDoc._id = new ObjectId();