Ajoutant à la réponse acceptée d'Andy Macleod, j'ai créé une fonction d'aide qui peut être utilisée pour vérifier à la fois les chaînes de caractères et les ObjectId.
Implantation :
var ObjectId = require("mongoose").Types.ObjectId;
function isValidObjectId(value) {
// If value is an ObjectId cast it to a string to allow
// passing string or ObjectId as an argument.
var valueString = typeof value === "string" ? value : String(value);
// Cast the string to ObjectId
var idInstance = new ObjectId(valueString);
return String(idInstance) === valueString;
}
Explication :
Dans la réponse acceptée Andy Macleod a dit :
Ce qui a fonctionné pour moi, c'est de transformer une chaîne de caractères en un objectId et puis de vérifier que la chaîne originale correspond à la valeur de la chaîne de l'objectId. objectId.
Avec la chaîne Invalid ObjectId
Transformation d'une chaîne invalide (comme "microsoft"
) à ObjectId, donne une valeur complètement différente :
"microsoft"
↓
String( new ObjectId("microsoft") );
↓
"6d6963726f736f6674313233"
↓
"microsoft" === "6d6963726f736f6674313233" // false
Avec une chaîne ObjectId valide
La conversion d'une chaîne valide comme ( "6d6963726f736f6674313233"
) à ObjectId, donne la même valeur :
"6d6963726f736f6674313233"
↓
String( new ObjectId("6d6963726f736f6674313233") )
↓
"6d6963726f736f6674313233"
↓
"6d6963726f736f6674313233" === "6d6963726f736f6674313233" // true