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

Hvordan implementerer man post-tags i Mongo?

Hvis det er usandsynligt, at de tags, du bruger, og deres respektive slugs vil ændre sig, tror jeg, at din anden tilgang er den bedre. Jeg vil dog foreslå en lille ændring - i stedet for at gemme et array af [name, slug] , gør felterne eksplicitte ved at oprette et tag-underdokument som i dette eksempel post dokument:

{
    "_id" : ObjectId("4ee33229d8854784468cda7e"),
    "title" : "My Post",
    "content" : "This is a post with some tags",
    "tags" : [
        {
            "name" : "meta",
            "slug" : "34589734"
        },
        {
            "name" : "post",
            "slug" : "34asd97x"
        },
    ]
}

Du kan derefter forespørge efter indlæg med et bestemt tag ved hjælp af punktnotation sådan her:

db.test.find({ "tags.name" : "meta"})

Fordi tags er et array, er mongo klog nok til at matche forespørgslen mod ethvert element i arrayet i stedet for arrayet som helhed, og dot-notation giver dig mulighed for at matche mod et bestemt felt.

For at forespørge efter indlæg ikke der indeholder et specifikt tag, skal du bruge $ne :

db.test.find({ "tags.name" : { $ne : "fish" }})

Og for at søge efter indlæg, der indeholder det ene tag, men ikke det andet, skal du bruge $and :

db.test.find({ $and : [{ "tags.name" : { $ne : "fish"}}, {"tags.name" : "meta"}]})

Håber dette hjælper!




  1. Validerer adgangskode/bekræft adgangskode med Mongoose-skema

  2. Effektiv måde at søge på med MongoDB og ASP.NET MVC

  3. MongoDB får første og sidste dokument i samlet forespørgsel

  4. Når jeg prøver at bruge Hibernate ogm og spring boot, giver konsollen Kunne ikke instansiere navngivet strategi klassefejl