sql >> Database >  >> NoSQL >> MongoDB

Hoe vind ik vergelijkbare documenten in MongoDB?

Allereerst moeten uw gegevens opnieuw worden gemodelleerd zoals hieronder:

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

Het extra "item" voegt geen extra informatie toe en helpt op geen enkele manier om toegang te krijgen tot de gegevens.

Vervolgens moet u een tekstindex maken . In de documenten staat dat

Dus we doen gewoon een

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

Nu kunnen we een $text doen zoeken :

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

die u de meest relevante documenten zou moeten geven.

Wat u echter ook kunt doen, is niet-tekst zoeken naar directe overeenkomsten:

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

of voor meerdere ingrediënten

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

Dus voor zoeken op gebruikersinvoer kunt u de tekstzoekfunctie gebruiken en voor zoeken op geselecteerde ingrediënten kunt u de niet-tekstzoekfunctie gebruiken.



  1. hoe u gegevens in een array van de verzameling kunt opvragen met behulp van mangoest

  2. selecteer alleen subdocumenten of arrays

  3. Kan mongoDB-module niet vinden bij implementatie naar Heroku

  4. docker, mongorestore - FOUT:hoofdmap moet een dump zijn van een enkele database