Först och främst bör din data omformas enligt nedan:
{
name: "Burger",
ingredients: [
"bread",
"cheese",
"tomato",
"beef"
]
}
Det extra "objektet" lägger inte till någon ytterligare information och hjälper inte heller att komma åt data på något sätt.
Därefter måste du skapa ett textindex . Dokumenten säger att
Så vi gör helt enkelt en
db.collection.ensureIndex({"ingredients":"text"})
Nu kan vi göra en $text
sök
:
db.collection.find(
{ $text: { $search: "bread beef" } },
{ score: { $meta: "textScore" } }
).sort( { score: { $meta: "textScore" } } )
som borde ge dig de mest relevanta dokumenten.
Men vad du också kan göra är att söka efter direkta matchningar utan text:
db.collection.find({ingredients:"beef"})
eller för flera ingredienser
db.collections.find({ ingredients: { $all: ["beef","bread"] } })
Så för att söka efter användarinmatning kan du använda textsökningen och för att söka efter utvalda ingredienser kan du använda icke-textsökning.