Recientemente comencé a usar MongoDB con Mongoose en Nodejs.
Cuando utilizo el método Model.find con $or
condición y _id
campo, 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 SÍ funciona!
User.find({
$or: [
{ 'name': param },
{ 'nickname': param }
]
}, function(err, docs) {
if(!err) res.send(docs);
});
Y en el shell de MongoDB, ambos funcionan correctamente.
const mongoose = require('mongoose'); mongoose.Types.ObjectId.isValid(objectidtocheck)
Les imploro a todos que usen el lenguaje y las promesas del generador de consultas de Mongoose en lugar de las devoluciones de llamada:
Leer más sobre Mongoose Queries .
fuente
Según la documentación de mongoDB: "... Es decir, para que MongoDB utilice índices para evaluar una expresión $ o, todas las cláusulas de la expresión $ o deben ser compatibles con índices".
Así que agregue índices para sus 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/
fuente
fuente