Zjistil jsem, že mongoose ObjectId validator funguje na ověření platných objectId, ale našel jsem několik případů, kdy byla neplatná ID považována za platná. (např.:libovolný řetězec o délce 12 znaků)
var ObjectId = require('mongoose').Types.ObjectId;
ObjectId.isValid('microsoft123'); //true
ObjectId.isValid('timtomtamted'); //true
ObjectId.isValid('551137c2f9e1fac808a5f572'); //true
Osvědčilo se mi přetypovat řetězec na objectId a poté zkontrolovat, zda původní řetězec odpovídá hodnotě řetězce objectId.
new ObjectId('timtamtomted'); //616273656e6365576f726b73
new ObjectId('537eed02ed345b2e039652d2') //537eed02ed345b2e039652d2
Funguje to proto, že platná id se při přetypování na ObjectId nezmění, ale řetězec, který získá false valid, se změní, když se přetypuje na objectId.