Przede wszystkim Twoje dane powinny zostać przemodelowane jak poniżej:
{
name: "Burger",
ingredients: [
"bread",
"cheese",
"tomato",
"beef"
]
}
Dodatkowa "Pozycja" nie dodaje żadnych dodatkowych informacji ani nie ułatwia dostępu do danych w żaden sposób.
Następnie musisz utworzyć indeks tekstowy . Dokumenty stwierdzają, że
Więc po prostu robimy
db.collection.ensureIndex({"ingredients":"text"})
Teraz możemy wykonać $text
szukaj
:
db.collection.find(
{ $text: { $search: "bread beef" } },
{ score: { $meta: "textScore" } }
).sort( { score: { $meta: "textScore" } } )
które powinny dać ci najistotniejsze dokumenty.
Możesz jednak również przeprowadzić wyszukiwanie nietekstowe dla bezpośrednich dopasowań:
db.collection.find({ingredients:"beef"})
lub dla wielu składników
db.collections.find({ ingredients: { $all: ["beef","bread"] } })
Tak więc do wyszukiwania według danych wprowadzonych przez użytkownika można użyć wyszukiwania tekstowego, a do wyszukiwania według wybranych składników można użyć wyszukiwania nietekstowego.