node cluster node.js mongodb mongoose

node.js - cluster - Comparando_id y cuerdas de mangosta



middleware node js (4)

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 si / entonces basado en esa identificación almacenada, la comparación nunca es verdadera:

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

Cuando hago un console.log de los dos identificadores, coinciden exactamente:

User id: 4fc67871349bb7bf6a000002 AnotherMongoDocument id: 4fc67871349bb7bf6a000002

Supongo que se trata de algún tipo de problema de tipo de datos, pero no estoy seguro de cómo convertir results.userId a un tipo de datos que dará como resultado que la comparación anterior sea cierta y mi cerebro subcontratado (también conocido como Google) no haya podido ayudar.


Las respuestas aceptadas realmente limitan lo que puedes hacer con tu código. Por ejemplo, no podría buscar una matriz de Object Ids utilizando el método equals. En su lugar, tendría más sentido siempre lanzar a la secuencia 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. Supongamos que la query es una consulta que está ejecutando, suponga que someModel es un modelo mongo para el ID que está buscando, y finalmente asuma que results.idList es el campo en el que está buscando su id de objeto.

query.exec(function(err,results){ var array = results.idList.map(function(v){ return v.toString(); }); var exists = array.indexOf(someModel._id.toString()) >= 0; console.log(exists); });


Mongoose usa el controlador mongodb-native, que usa el tipo de ObjectID personalizado. Puede comparar ObjectID con el método .equals() . Con su ejemplo, results.userId.equals(AnotherMongoDocument._id) . El tipo ObjectID también tiene un método toString() , si desea almacenar una versión codificada del ObjectID en formato JSON, o una cookie.

Si usa ObjectID = require("mongodb").ObjectID (requiere la biblioteca mongodb-native) puede verificar si results.userId es un identificador válido con la results.userId instanceof ObjectID .

Etc.


la conversión de Id de objeto a cadena (usando el método toString ()) hará el trabajo.


ObjectID s son objetos, por lo que si los compara con == está comparando sus referencias. Si desea comparar sus valores, debe utilizar el método ObjectID.equals :

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