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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top