265 votes

Comparaison de la mangouste _id et des chaînes

J'ai un node.js application qui extrait des données et l'enfonce dans un objet, comme ceci:

var results = new Object();

User.findOne(query, function(err, u) {
    results.userId = u._id;
}

Quand je fais un if/then basée sur celle stockée ID, la comparaison n'est jamais vrai:

if (results.userId == AnotherMongoDocument._id) {
    console.log('This is never true');
}

Quand je fais un console.journal de la deux id, ils correspondent exactement:

User id: 4fc67871349bb7bf6a000002 AnotherMongoDocument id: 4fc67871349bb7bf6a000002

Je suis en supposant que c'est une sorte de type de problème, mais je ne suis pas sûr de savoir comment convertir les résultats.code d'utilisateur pour un type de données qui en résultera dans le rapport ci-dessus pour être vrai et mon externalisé cerveau (aka Google) a été incapable de l'aider.

453voto

cjohn Points 2416

Mangouste utilise mongodb-pilote natif, qui utilise la coutume ObjectID type. Vous pouvez comparer ObjectIDs avec l' .equals() méthode. Avec votre exemple, results.userId.equals(AnotherMongoDocument._id). L'ObjectID type a aussi un toString() méthode, si vous souhaitez mettre un stringified version de l'ObjectID au format JSON, ou d'un cookie.

Si vous utilisez ObjectID = require("mongodb").ObjectID (nécessite la mongodb-bibliothèque native), vous pouvez vérifier si results.userId est un identificateur valide avec results.userId instanceof ObjectID.

Etc.

74voto

JohnnyHK Points 61191

ObjectID sont des objets, donc si vous les comparez avec == vous comparez leurs références. Si vous souhaitez comparer leurs valeurs, vous devez utiliser la méthode ObjectID.equals :

 if (results.userId.equals(AnotherMongoDocument._id)) {
    ...
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X