mongodb trouver en comparant les valeurs de champ
Est-il possible d'exprimer la requête SQL suivante dans mongodb:
SELECT * FROM table AS t WHERE t.field1 > t.filed2;
edit:
Pour résumer:.
- à l'aide d'un troisième champ de stockage "champ1 - champ2" est presque parfait, mais nécessite un peu plus d'entretien.
- $où va charger et eval en JavaScript et ne pas utiliser les index. Pas bon pour les gros volumes de données.
- map/reduce a le même problème et à travers tous les dossiers, même si nous avons besoin d'un seul
Je ne veux pas commencer une guerre, mais la flamme gosh, je déteste noSQL tellement.
alors ne l'utilisez pas si vous ne savez pas où et comment l'utiliser correctement. Le NoSQL n'est PAS un remplacement pour les bases de données relationnelles!
C'est la source de ma frustration. La plupart des gens se réfèrent à lui comme si c'est un remplacement. Je vois de plus en plus de comparaisons, le long de la lignes de la vieille (relationnel) vs moderne (noSQL) des banques de données.
alors ne l'utilisez pas si vous ne savez pas où et comment l'utiliser correctement. Le NoSQL n'est PAS un remplacement pour les bases de données relationnelles!
C'est la source de ma frustration. La plupart des gens se réfèrent à lui comme si c'est un remplacement. Je vois de plus en plus de comparaisons, le long de la lignes de la vieille (relationnel) vs moderne (noSQL) des banques de données.
OriginalL'auteur Blago | 2011-06-18
Vous devez vous connecter pour publier un commentaire.
Vous pouvez faire cela en utilisant $où:
Mais:
Si la performance est une question qu'il vaut mieux aller avec le sens proposé par @yi_H.
Avez-vous lu ma réponse à la fin, avant le vote, en bas????? J'ai dit que javascript travail lent et mieux pour créer des champs supplémentaires comme @yi_H suggéré. Mais de toute façon $opérateur où existe je suis absolument sûr qu'il peut être utilisé dans certaines situations où la performance pas de problème.
À n'utiliser que si vous avez une petite collection ou de pré-filtré de la collection avec d'autres conditions (qui utilisent des index et de retour d'un petit sous-ensemble de la collection). Mongo n'a aucune idée de comment faire pour accélérer cette requête et exécute un full table scan.
Ouais, je sais à propos de full table scan. Merci pour la clarification, en quelque sorte.
Pas de son pas. C'est la raison pour laquelle nous ne programmation en langage d'assemblage plus.
OriginalL'auteur Andrew Orsich
Vous pouvez stocker dans votre document
field1 - field2
commefield3
, puis de rechercher les{ field3: { $gt: 0 } }
Il est également possible d'obtenir des documents correspondants avec mapreduce.
OriginalL'auteur Karoly Horvath
Vous pouvez utiliser un $où. Juste être conscient qu'il sera assez lente (a exécuter du code Javascript sur chaque dossier) afin de combiner avec indexé requêtes si vous le pouvez.
ou plus compact:
OriginalL'auteur sravanthi