Zunächst sollten Ihre Daten wie folgt umgestaltet werden:
{
name: "Burger",
ingredients: [
"bread",
"cheese",
"tomato",
"beef"
]
}
Das zusätzliche "Item" fügt keine zusätzlichen Informationen hinzu und hilft in keiner Weise beim Zugriff auf die Daten.
Als nächstes müssen Sie einen Textindex erstellen . Das steht in der Dokumentation
Also machen wir einfach ein
db.collection.ensureIndex({"ingredients":"text"})
Jetzt können wir einen $text
ausführen suchen
:
db.collection.find(
{ $text: { $search: "bread beef" } },
{ score: { $meta: "textScore" } }
).sort( { score: { $meta: "textScore" } } )
die Ihnen die relevantesten Dokumente geben sollten.
Sie können jedoch auch eine Nicht-Text-Suche nach direkten Übereinstimmungen durchführen:
db.collection.find({ingredients:"beef"})
oder für mehrere Zutaten
db.collections.find({ ingredients: { $all: ["beef","bread"] } })
Für die Suche nach Benutzereingaben können Sie also die Textsuche verwenden und für die Suche nach ausgewählten Zutaten die Nicht-Text-Suche.