Можете да използвате обекти и за полето _id. Полето _id винаги е уникално. По този начин ще получите съставен първичен ключ:
{ _id : { a : 1, b: 1} }
Просто внимавайте, когато създавате тези идентификатори, че редът на ключовете (a и b в примера) има значение, ако ги размените, това се счита за различен обект.
Другата възможност е да оставите _id сам и да създадете уникален съставен индекс.
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/