Il n'y a pas de différences d'efficacité majeures à ma connaissance sauf dans certains cas, comme le tri par date (puisque les ObjectId contiennent la date et l'heure, etc.)
Par exemple, vous perdriez la possibilité de simplement commander par _id vous perdriez également les avantages du sharding et distribution . En dehors de cela, alors que j'utiliserais toujours personnellement les ObjectId de toute façon ... tant que le int est unquie (bien sûr) ... ça devrait aller.
Depuis le _id "revient" toujours dans une requête, je suppose que vous gagnerez un peu de temps et de transfert de données (un peu.)
Vous pouvez même créer votre _id un tableau si vous le souhaitez, et tout indexera bien voir ceci réponse (pas que je recommanderais nécessairement cela la plupart du temps.)
Voir également :Optimisation des ID d'objet