Ho scoperto che il validatore ObjectId mangusta funziona per convalidare objectId validi, ma ho trovato alcuni casi in cui gli ID non validi erano considerati validi. (es:qualsiasi stringa di 12 caratteri)
var ObjectId = require('mongoose').Types.ObjectId;
ObjectId.isValid('microsoft123'); //true
ObjectId.isValid('timtomtamted'); //true
ObjectId.isValid('551137c2f9e1fac808a5f572'); //true
Ciò che ha funzionato per me è eseguire il cast di una stringa su un objectId e quindi verificare che la stringa originale corrisponda al valore della stringa di objectId.
new ObjectId('timtamtomted'); //616273656e6365576f726b73
new ObjectId('537eed02ed345b2e039652d2') //537eed02ed345b2e039652d2
Questo funziona perché gli ID validi non cambiano quando si esegue il cast a un ObjectId, ma una stringa che ottiene un valore falso valido cambierà quando si esegue il cast a un objectId.