Tengo una aplicación node.js que extrae algunos datos y los pega en un objeto, como este:
var results = new Object();
User.findOne(query, function(err, u) {
results.userId = u._id;
}
Cuando hago un if / then basado en esa ID almacenada, la comparación nunca es cierta:
if (results.userId == AnotherMongoDocument._id) {
console.log('This is never true');
}
Cuando hago un console.log de los dos id, coinciden exactamente:
User id: 4fc67871349bb7bf6a000002 AnotherMongoDocument id: 4fc67871349bb7bf6a000002
Supongo que este es algún tipo de problema de tipo de datos, pero no estoy seguro de cómo convertir los resultados. ID de usuario a un tipo de datos que dará como resultado que la comparación anterior sea verdadera y mi cerebro tercerizado (también conocido como Google) no ha podido ayudar.
.equals()
: mongodb.github.io/node-mongodb-native/api-bson-generated/…mongoose
, puederequire('mongoose').mongo.ObjectID
hacerlo para no tener que enumerar ninguna dependencia adicionalObjectID
s son objetos, así que si solo los comparas con ellos==
, estás comparando sus referencias. Si desea comparar sus valores, debe utilizar elObjectID.equals
método:fuente
convertir el ID del objeto a cadena (usando el método toString ()) hará el trabajo.
fuente
Las respuestas aceptadas realmente limitan lo que puede hacer con su código. Por ejemplo, no podría buscar una matriz
Object Ids
utilizando el método equals. En cambio, tendría más sentido lanzar siempre a cadena y comparar las claves.Aquí hay una respuesta de ejemplo en caso de que necesite usar
indexOf()
para verificar dentro de una matriz de referencias para una identificación específica. asumirquery
es una consulta que está ejecutando, asumirsomeModel
es un modelo mongo para la identificación que está buscando, y finalmente asumirresults.idList
es el campo en el que está buscando su identificación de objeto.fuente
let exists = results.idList.filter(val => val.toString() === thisIsTheStringifiedIdWeAreLookingFor).length ? true : false
const exists = results.idList.some(val => val.toString() === thisIsTheStringifiedIdWeAreLookingFor)
oconst exists = results.idList.some(val => val.equals(someModel._id))
De acuerdo con lo anterior, encontré tres formas de resolver el problema.
AnotherMongoDocument._id.toString()
JSON.stringify(AnotherMongoDocument._id)
results.userId.equals(AnotherMongoDocument._id)
fuente
Me enfrenté exactamente al mismo problema y simplemente resolví el problema con la siguiente ayuda
JSON.stringify()
:fuente
Las tres posibles soluciones sugeridas aquí tienen diferentes casos de uso.
Utilice .equals al comparar ObjectID en dos mongoDocuments como este
results.userId.equals (AnotherMongoDocument._id)
Utilice .toString () al comparar una representación de cadena de ObjectID con un ObjectID de un mongoDocument. Me gusta esto
results.userId === AnotherMongoDocument._id.toString ()
fuente