Mangouste, comment faire un find() avec deux ou conditions
Je suis en train de faire une découverte qui va recevoir tous les documents qui, a un titre ou desc qui contient l'expression régulière (qui fonctionne) et puis on le filtre en outre à ne contiennent que des documents qui ont le "privé" indicateur a la valeur false ou "l'utilisateur" de champ le nom d'utilisateur.
Voici ce que j'essaie de si loin...
FCSet.find({}, {"flashCards":0}).or([{ 'title': { $regex: re }}, { 'desc': { $regex: re }}]).or([{ 'private': false}, { 'user': 'userId'}]).sort('title')
Cela ne devrait être de retour 6 lignes, mais il est de retour 56. Si je prends la 2ème ou de la (), puis il travaille pour le filtrage par titre/desc. Je devine que je vais sur le mauvais chemin.
Quelqu'un peut-il m'aider à comprendre comment faire cela correctement?
Je ne suis pas sûr si $rup seront fusionnés côté serveur en tant que tels faire le dessous de la requête pourrait être un glas pour votre base de données, vous aurez à fusionnées et retour 4 séries de résultats séparément dans MongoDB.
OriginalL'auteur Triton Man | 2014-01-22
Vous devez vous connecter pour publier un commentaire.
Vous devez mettre le
OR
s dans unAND
:OriginalL'auteur heinob
La réponse par @heinob est tout à fait correcte, cependant je vous supplie de ne pas l'utiliser.
La principale raison est que imbriquée
$or
requêtes NE PAS UTILISER d'INDEX: https://jira.mongodb.org/browse/SERVER-3327(en fait plus spécifiques à votre cas: https://jira.mongodb.org/browse/SERVER-6542 )
Un indice sur ce bloc sera tout à fait inutile.
À la place vous feriez mieux de codage dans votre application un moyen de créer un seul
$or
bloc au lieu de faire ce qui ressemble à de la manière la plus simple.$or
requêtes de ne pas utiliser les index efficacement .. cependant, je voudrais faire remarquer que ce problème a été corrigé (huzzah!) pour la prochaine MongoDB 2.5.5 développement/unstable.ah oui je vois c'est résolu maintenant, doux, 2.6 va être incroyable
OriginalL'auteur Sammaye