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);
});