sql >> Database >  >> NoSQL >> MongoDB

Hoe post-tags in Mongo implementeren?

Als het onwaarschijnlijk is dat de tags die u gebruikt en hun respectievelijke slugs veranderen, denk ik dat uw tweede benadering de betere is. Ik zou echter een kleine wijziging willen voorstellen - in plaats van een array van [name, slug] op te slaan , maak de velden expliciet door een tag-subdocument te maken zoals in dit voorbeeld post document:

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

Je kunt dan zoeken naar berichten met een bepaalde tag met behulp van puntnotatie zoals dit:

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

Omdat tags is een array, mongo is slim genoeg om de query te vergelijken met elk element van de array in plaats van de array als geheel, en puntnotatie stelt je in staat om te matchen met een bepaald veld.

Vragen naar berichten niet met een specifieke tag, gebruik $ne :

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

En om te zoeken naar berichten die de ene tag bevatten, maar niet de andere, gebruik je $and :

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

Ik hoop dat dit helpt!




  1. Laravel 5.5 redis-wachtrij is te traag

  2. Een-een- en een-veel-referenties verwijderen - Mongoose

  3. mongoexport met parameters + node.js + onderliggend proces

  4. Het authenticatiemechanisme SCRAM-SHA-1 wordt niet ondersteund