На първо място, вашите данни трябва да бъдат премоделирани, както е показано по-долу:
{
name: "Burger",
ingredients: [
"bread",
"cheese",
"tomato",
"beef"
]
}
Допълнителният „Елемент“ не добавя допълнителна информация, нито помага за достъп до данните по някакъв начин.
След това трябва да създадете текстов индекс . Това се посочва в документите
Така че ние просто правим a
db.collection.ensureIndex({"ingredients":"text"})
Сега можем да направим $text
търсене
:
db.collection.find(
{ $text: { $search: "bread beef" } },
{ score: { $meta: "textScore" } }
).sort( { score: { $meta: "textScore" } } )
който трябва да ви предостави най-подходящите документи.
Но това, което можете да направите, е нетекстово търсене за директни съвпадения:
db.collection.find({ingredients:"beef"})
или за множество съставки
db.collections.find({ ingredients: { $all: ["beef","bread"] } })
Така че за търсене по въведени от потребителя можете да използвате текстовото търсене, а за търсене по избрани съставки можете да използвате нетекстовото търсене.