Wie Sie in mongodb eine AND-Abfrage auf einem Array tun?
-
20-09-2019 - |
Frage
ich ein Array mit Tags haben, die Teil eines Dokuments, zB [ "Rot", "grün", "blau", "weiß", "schwarz"]
Jetzt möchte ich alle Dokumente finden, die rot und blau haben.
Lösung
Verwenden Sie die $ alle Konditionssätze zu finden, die sowohl „rot“ entsprechen und „Blau“ Bedingungen.
db.my_collection.find({tags: { $all : ["red","blue"]}})
Wenn Sie Datensätze, dass Spiel entweder „rot“ oder „blau“, dann können Sie den $ in Bedingung verwenden.
db.my_collection.find({tags: { $in : ["red","blue"]}})
Andere Tipps
Auch falls jemand fragt sich, wie zu negieren Suche aufgeschlüsselt, dh Aufzeichnung finden, die sowohl „rot“ entsprechen und „Blau“ und stimmen nicht überein „grün“ und „weiß“ Dies kann mit der erreicht werden $ nin Betreiber, die nicht offensichtlich sein kann, wenn jemand $ nin docs lesen ( http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24nin - Beschreibung Parsen war heikel für mich):
db.my_collection.find({tags: { $all : ["red","blue"], $nin : ["green", "white" ]}})
Das ist sehr cool, da es relativ schön Suchsyntax mit Negation erlaubt:
tokenRequired1 tokenRequired2 !tokenForbidden1 !tokenForbidden2
Sehr natürlich, Gmail-Stil suchen.
Wie vorgeschlagen hier und hier Volltextsuche tun können, wenn Sie ein erstellen Array aller Token aus einem Datensatz, obwohl ich keine Ahnung, ob es effizient oder sogar der beste Weg, es zu tun.