sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Cómo puedo encontrar documentos similares en MongoDB?

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.