Først og fremmest skal dine data ombygges som nedenfor:
{
name: "Burger",
ingredients: [
"bread",
"cheese",
"tomato",
"beef"
]
}
Det ekstra "element" tilføjer ikke yderligere oplysninger og hjælper heller ikke med at få adgang til dataene på nogen måde.
Dernæst skal du oprette et tekstindeks . Dokumenterne siger, at
Så vi laver simpelthen en
db.collection.ensureIndex({"ingredients":"text"})
Nu kan vi lave en $text
søg
:
db.collection.find(
{ $text: { $search: "bread beef" } },
{ score: { $meta: "textScore" } }
).sort( { score: { $meta: "textScore" } } )
som skulle give dig de mest relevante dokumenter.
Men hvad du også kunne gøre er en ikke-tekstsøgning efter direkte match:
db.collection.find({ingredients:"beef"})
eller for flere ingredienser
db.collections.find({ ingredients: { $all: ["beef","bread"] } })
Så for at søge efter brugerinput kan du bruge tekstsøgningen, og for at søge efter udvalgte ingredienser kan du bruge ikke-tekstsøgning.