MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Come posso trovare documenti simili in MongoDB?

Prima di tutto, i tuoi dati dovrebbero essere rimodellati come di seguito:

{
  name: "Burger",
  ingredients: [
    "bread",
    "cheese",
    "tomato",
    "beef"
  ]
}

L'"Elemento" extra non aggiunge alcuna informazione aggiuntiva né aiuta in alcun modo l'accesso ai dati.

Successivamente, devi creare un indice di testo . I documenti lo affermano

Quindi facciamo semplicemente un

db.collection.ensureIndex({"ingredients":"text"})

Ora possiamo fare un $text cerca :

db.collection.find(
  { $text: { $search: "bread beef" } },
  { score: { $meta: "textScore" } }
).sort( { score: { $meta: "textScore" } } )

che dovrebbe fornirti i documenti più rilevanti.

Tuttavia, ciò che potresti anche fare è una ricerca non testuale per le corrispondenze dirette:

db.collection.find({ingredients:"beef"})

o per più ingredienti

db.collections.find({ ingredients: { $all: ["beef","bread"] } })

Quindi, per la ricerca per input dell'utente, puoi utilizzare la ricerca testuale e per la ricerca per ingredienti selezionati, puoi utilizzare la ricerca non testuale.