tutorial node example and actualizar mongodb node.js mongoose

mongodb - node - El método de búsqueda de Mongoose con $ o condición no funciona correctamente



mongoose model javascript (3)

Recientemente comencé a usar MongoDB con Mongoose en Nodejs.

Cuando uso el método Model.find con $or condición y el campo _id , Mongoose no funciona correctamente.

Esto no funciona:

User.find({ $or: [ { ''_id'': param }, { ''name'': param }, { ''nickname'': param } ] }, function(err, docs) { if(!err) res.send(docs); });

Por cierto, si elimino la parte ''_id'', ¡esto funciona!

User.find({ $or: [ { ''name'': param }, { ''nickname'': param } ] }, function(err, docs) { if(!err) res.send(docs); });

Y en el shell MongoDB, ambos funcionan correctamente.


De acuerdo con la documentación de mongoDB: "... Es decir, para que MongoDB use índices para evaluar una expresión $ o, todas las cláusulas en la expresión $ o deben ser soportadas por índices".

Así que agrega índices para tus otros campos y funcionará. Tuve un problema similar y esto lo resolvió.

Puede leer más aquí: https://docs.mongodb.com/manual/reference/operator/query/or/


Les imploro a todos que utilicen el lenguaje y las promesas del generador de consultas de Mongoose en lugar de las devoluciones de llamadas:

User.find().or([{ name: param }, { nickname: param }]) .then(users => { /*logic here*/ }) .catch(error => { /*error logic here*/ })

Lea más acerca de las Consultas de Mangosta .


Lo resolví a través de Google:

var ObjectId = require(''mongoose'').Types.ObjectId; var objId = new ObjectId( (param.length < 12) ? "123456789012" : param ); // You should make string ''param'' as ObjectId type. To avoid exception, // the ''param'' must consist of more than 12 characters. User.find( { $or:[ {''_id'':objId}, {''name'':param}, {''nickname'':param} ]}, function(err,docs){ if(!err) res.send(docs); });