sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur kan jag hitta liknande dokument i MongoDB?

Först och främst bör din data omformas enligt nedan:

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

Det extra "objektet" lägger inte till någon ytterligare information och hjälper inte heller att komma åt data på något sätt.

Därefter måste du skapa ett textindex . Dokumenten säger att

Så vi gör helt enkelt en

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

Nu kan vi göra en $text sök :

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

som borde ge dig de mest relevanta dokumenten.

Men vad du också kan göra är att söka efter direkta matchningar utan text:

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

eller för flera ingredienser

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

Så för att söka efter användarinmatning kan du använda textsökningen och för att söka efter utvalda ingredienser kan du använda icke-textsökning.



  1. Spring Boot Integration Testing med Embedded MongoDB

  2. Multipel användning av positionsoperatorn `$` för att uppdatera kapslade arrayer

  3. Ta bort kapslade dokument med villkor i MongoDB

  4. Hur man får meteor.com-appar att använda extern mongo db