Descubrí que el validador de ObjectId de mongoose funciona para validar objectIds válidos, pero encontré algunos casos en los que las identificaciones no válidas se consideraban válidas. (por ejemplo:cualquier cadena de 12 caracteres)
var ObjectId = require('mongoose').Types.ObjectId;
ObjectId.isValid('microsoft123'); //true
ObjectId.isValid('timtomtamted'); //true
ObjectId.isValid('551137c2f9e1fac808a5f572'); //true
Lo que ha funcionado para mí es enviar una cadena a un objectId y luego verificar que la cadena original coincida con el valor de cadena del objectId.
new ObjectId('timtamtomted'); //616273656e6365576f726b73
new ObjectId('537eed02ed345b2e039652d2') //537eed02ed345b2e039652d2
Esto funciona porque las identificaciones válidas no cambian cuando se convierten en un ObjectId, pero una cadena que obtiene un falso válido cambiará cuando se convierte en un objectId.