Récemment, j'ai commencé à utiliser MongoDB avec Mongoose sur Nodejs.
Lorsque j'utilise la méthode Model.find avec $or
condition et _id
champ, Mongoose ne fonctionne pas correctement.
Cela ne fonctionne pas:
User.find({
$or: [
{ '_id': param },
{ 'name': param },
{ 'nickname': param }
]
}, function(err, docs) {
if(!err) res.send(docs);
});
Au fait, si je supprime la partie '_id', cela fonctionne!
User.find({
$or: [
{ 'name': param },
{ 'nickname': param }
]
}, function(err, docs) {
if(!err) res.send(docs);
});
Et dans le shell MongoDB, les deux fonctionnent correctement.
const mongoose = require('mongoose'); mongoose.Types.ObjectId.isValid(objectidtocheck)
J'implore tout le monde d'utiliser le langage de création de requêtes et les promesses de Mongoose au lieu des rappels:
En savoir plus sur les requêtes Mongoose .
la source
Selon la documentation de mongoDB: "... Autrement dit, pour que MongoDB utilise des index pour évaluer une expression $ or, toutes les clauses de l'expression $ or doivent être supportées par des index."
Ajoutez donc des index pour vos autres champs et cela fonctionnera. J'ai eu un problème similaire et cela l'a résolu.
Vous pouvez en savoir plus ici: https://docs.mongodb.com/manual/reference/operator/query/or/
la source
la source