MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie finde ich ähnliche Dokumente in MongoDB?

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.