Eu tenho um aplicativo node.js que extrai alguns dados e os cola em um objeto, como este:
var results = new Object();
User.findOne(query, function(err, u) {
results.userId = u._id;
}
Quando eu faço um if / then com base nesse ID armazenado, a comparação nunca é verdadeira:
if (results.userId == AnotherMongoDocument._id) {
console.log('This is never true');
}
Quando eu faço um console.log dos dois IDs, eles correspondem exatamente:
User id: 4fc67871349bb7bf6a000002 AnotherMongoDocument id: 4fc67871349bb7bf6a000002
Estou assumindo que este é algum tipo de problema de tipo de dados, mas não tenho certeza de como converter results.userId para um tipo de dados que resultará na verdade na comparação acima e meu cérebro terceirizado (aka Google) não conseguiu ajudar.
.equals()
: mongodb.github.io/node-mongodb-native/api-bson-generated/…mongoose
você pode apenasrequire('mongoose').mongo.ObjectID
para que você não tem que listar todas as dependências adicionaisObjectID
s são objetos; portanto, se você apenas os comparar,==
você comparará as referências deles. Se você quiser comparar seus valores, precisará usar oObjectID.equals
método:fonte
a conversão do ID do objeto em string (usando o método toString ()) fará o trabalho.
fonte
As respostas aceitas realmente limitam o que você pode fazer com seu código. Por exemplo, você não seria capaz de pesquisar uma matriz
Object Ids
usando o método equals. Em vez disso, faria mais sentido sempre converter para string e comparar as chaves.Aqui está um exemplo de resposta, caso você precise usar
indexOf()
para verificar em uma matriz de referências um ID específico. assume quequery
é uma consulta que você está executando, assume quesomeModel
é um modelo mongo para o ID que você está procurando e, finalmente, assume queresults.idList
é o campo em que você está procurando seu ID de objeto.fonte
let exists = results.idList.filter(val => val.toString() === thisIsTheStringifiedIdWeAreLookingFor).length ? true : false
const exists = results.idList.some(val => val.toString() === thisIsTheStringifiedIdWeAreLookingFor)
ouconst exists = results.idList.some(val => val.equals(someModel._id))
De acordo com o exposto, encontrei três maneiras de resolver o problema.
AnotherMongoDocument._id.toString()
JSON.stringify(AnotherMongoDocument._id)
results.userId.equals(AnotherMongoDocument._id)
fonte
Enfrentei exatamente o mesmo problema e simplesmente resolvi o problema com a ajuda da
JSON.stringify()
seguinte forma: -fonte
As três soluções possíveis sugeridas aqui têm diferentes casos de uso.
Use .equals ao comparar ObjectID em dois mongoDocuments como este
results.userId.equals (AnotherMongoDocument._id)
Use .toString () ao comparar uma representação de string de ObjectID a um ObjectID de um mongoDocument. como isso
results.userId === AnotherMongoDocument._id.toString ()
fonte