Vous pouvez également utiliser des objets pour le champ _id. Le champ _id est toujours unique. De cette façon, vous obtenez en quelque sorte une clé primaire composite :
{ _id : { a : 1, b: 1} }
Faites juste attention lors de la création de ces identifiants que l'ordre des clés (a et b dans l'exemple) compte, si vous les permutez, il est considéré comme un objet différent.
L'autre possibilité est de laisser _id seul et de créer un index composé unique.
db.things.ensureIndex({firstname: 1, lastname: 1}, {unique: true});
//Deprecated since version 3.0.0, is now an alias for db.things.createIndex()
https://docs.mongodb.org/v3.0/reference/method/db.collection.ensureIndex/