Recentemente, comecei a usar o MongoDB com o Mongoose no Nodejs.
Quando eu uso o método Model.find com $or
condição e _id
campo, o Mongoose não funciona corretamente.
Isso não funciona:
User.find({
$or: [
{ '_id': param },
{ 'name': param },
{ 'nickname': param }
]
}, function(err, docs) {
if(!err) res.send(docs);
});
A propósito, se eu remover a parte '_id', isso FUNCIONA!
User.find({
$or: [
{ 'name': param },
{ 'nickname': param }
]
}, function(err, docs) {
if(!err) res.send(docs);
});
E no shell do MongoDB, ambos funcionam corretamente.
const mongoose = require('mongoose'); mongoose.Types.ObjectId.isValid(objectidtocheck)
Imploro a todos que usem a linguagem de construção de consultas e promessas do Mongoose em vez de callbacks:
Leia mais sobre as consultas do Mongoose .
fonte
De acordo com a documentação do mongoDB: "... Ou seja, para o MongoDB usar índices para avaliar um $ ou expressão, todas as cláusulas em $ ou expressão devem ser suportadas por índices."
Portanto, adicione índices para seus outros campos e isso funcionará. Eu tive um problema semelhante e isso resolveu.
Você pode ler mais aqui: https://docs.mongodb.com/manual/reference/operator/query/or/
fonte
fonte