Allereerst moeten uw gegevens opnieuw worden gemodelleerd zoals hieronder:
{
name: "Burger",
ingredients: [
"bread",
"cheese",
"tomato",
"beef"
]
}
Het extra "item" voegt geen extra informatie toe en helpt op geen enkele manier om toegang te krijgen tot de gegevens.
Vervolgens moet u een tekstindex maken . In de documenten staat dat
Dus we doen gewoon een
db.collection.ensureIndex({"ingredients":"text"})
Nu kunnen we een $text
doen zoeken
:
db.collection.find(
{ $text: { $search: "bread beef" } },
{ score: { $meta: "textScore" } }
).sort( { score: { $meta: "textScore" } } )
die u de meest relevante documenten zou moeten geven.
Wat u echter ook kunt doen, is niet-tekst zoeken naar directe overeenkomsten:
db.collection.find({ingredients:"beef"})
of voor meerdere ingrediënten
db.collections.find({ ingredients: { $all: ["beef","bread"] } })
Dus voor zoeken op gebruikersinvoer kunt u de tekstzoekfunctie gebruiken en voor zoeken op geselecteerde ingrediënten kunt u de niet-tekstzoekfunctie gebruiken.