En primer lugar, sus datos deben remodelarse de la siguiente manera:
{
name: "Burger",
ingredients: [
"bread",
"cheese",
"tomato",
"beef"
]
}
El "elemento" adicional no agrega ninguna información adicional ni ayuda a acceder a los datos de ninguna manera.
A continuación, debe crear un índice de texto . Los documentos afirman que
Así que simplemente hacemos un
db.collection.ensureIndex({"ingredients":"text"})
Ahora podemos hacer un $text
buscar
:
db.collection.find(
{ $text: { $search: "bread beef" } },
{ score: { $meta: "textScore" } }
).sort( { score: { $meta: "textScore" } } )
que debería proporcionarle los documentos más relevantes.
Sin embargo, lo que también podría hacer es una búsqueda sin texto de coincidencias directas:
db.collection.find({ingredients:"beef"})
o para múltiples ingredientes
db.collections.find({ ingredients: { $all: ["beef","bread"] } })
Entonces, para buscar por entrada de usuario, puede usar la búsqueda de texto y para buscar por ingredientes seleccionados, puede usar la búsqueda sin texto.