Tout d'abord, vos données doivent être remodelées comme ci-dessous :
{
name: "Burger",
ingredients: [
"bread",
"cheese",
"tomato",
"beef"
]
}
L'"élément" supplémentaire n'ajoute aucune information supplémentaire et n'aide en aucune façon à accéder aux données.
Ensuite, vous devez créer un index de texte . La documentation indique que
Donc on fait simplement un
db.collection.ensureIndex({"ingredients":"text"})
Maintenant, nous pouvons faire un $text
rechercher
:
db.collection.find(
{ $text: { $search: "bread beef" } },
{ score: { $meta: "textScore" } }
).sort( { score: { $meta: "textScore" } } )
qui devrait vous fournir les documents les plus pertinents.
Cependant, vous pouvez également effectuer une recherche non textuelle pour les correspondances directes :
db.collection.find({ingredients:"beef"})
ou pour plusieurs ingrédients
db.collections.find({ ingredients: { $all: ["beef","bread"] } })
Ainsi, pour la recherche par saisie de l'utilisateur, vous pouvez utiliser la recherche textuelle et pour la recherche par ingrédients sélectionnés, vous pouvez utiliser la recherche non textuelle.