J'ai une application node.js qui extrait des données et les colle 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é sur cet ID stocké, la comparaison n'est jamais vraie:
if (results.userId == AnotherMongoDocument._id) {
console.log('This is never true');
}
Quand je fais un console.log des deux identifiants, ils correspondent exactement:
User id: 4fc67871349bb7bf6a000002 AnotherMongoDocument id: 4fc67871349bb7bf6a000002
Je suppose que c'est une sorte de problème de type de données, mais je ne sais pas comment convertir results.userId en un type de données qui entraînera la comparaison ci-dessus et mon cerveau externalisé (alias Google) n'a pas pu aider.
.equals()
: mongodb.github.io/node-mongodb-native/api-bson-generated/…mongoose
vous pouvez simplementrequire('mongoose').mongo.ObjectID
ne pas avoir à répertorier de dépendances supplémentairesObjectID
s sont des objets, donc si vous les comparez avec==
vos références. Si vous souhaitez comparer leurs valeurs, vous devez utiliser laObjectID.equals
méthode:la source
la conversion de l'ID d'objet en chaîne (en utilisant la méthode toString ()) fera le travail.
la source
Les réponses acceptées limitent vraiment ce que vous pouvez faire avec votre code. Par exemple, vous ne pourrez pas rechercher un tableau de
Object Ids
à l'aide de la méthode equals. Au lieu de cela, il serait plus logique de toujours transtyper en chaîne et de comparer les clés.Voici un exemple de réponse au cas où vous devriez utiliser
indexOf()
pour vérifier dans un tableau de références un identifiant spécifique. assumerquery
est une requête que vous exécutez, assumersomeModel
est un modèle mongo pour l'id que vous recherchez, et enfin assumerresults.idList
est le champ dans lequel vous recherchez l'ID de votre objet.la source
let exists = results.idList.filter(val => val.toString() === thisIsTheStringifiedIdWeAreLookingFor).length ? true : false
const exists = results.idList.some(val => val.toString() === thisIsTheStringifiedIdWeAreLookingFor)
orconst exists = results.idList.some(val => val.equals(someModel._id))
Selon ce qui précède, j'ai trouvé trois façons de résoudre le problème.
AnotherMongoDocument._id.toString()
JSON.stringify(AnotherMongoDocument._id)
results.userId.equals(AnotherMongoDocument._id)
la source
J'ai fait face exactement au même problème et j'ai simplement résolu le problème à l'aide de ce
JSON.stringify()
qui suit: -la source
Les trois solutions possibles suggérées ici ont des cas d'utilisation différents.
Utilisez .equals lorsque vous comparez ObjectID sur deux mongoDocuments comme celui-ci
results.userId.equals (AnotherMongoDocument._id)
Utilisez .toString () lorsque vous comparez une représentation sous forme de chaîne de ObjectID à un ObjectID d'un mongoDocument. comme ça
results.userId === AnotherMongoDocument._id.toString ()
la source