MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment puis-je trouver des documents similaires dans MongoDB ?

Tout d'abord, vos données doivent être remodelées comme ci-dessous :

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

L'"élément" supplémentaire n'ajoute aucune information supplémentaire et n'aide en aucune façon à accéder aux données.

Ensuite, vous devez créer un index de texte . La documentation indique que

Donc on fait simplement un

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

Maintenant, nous pouvons faire un $text rechercher :

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

qui devrait vous fournir les documents les plus pertinents.

Cependant, vous pouvez également effectuer une recherche non textuelle pour les correspondances directes :

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

ou pour plusieurs ingrédients

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

Ainsi, pour la recherche par saisie de l'utilisateur, vous pouvez utiliser la recherche textuelle et pour la recherche par ingrédients sélectionnés, vous pouvez utiliser la recherche non textuelle.