MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como implementar tags de postagem no Mongo?


Se é improvável que as tags que você usa e seus respectivos slugs mudem, acho que sua segunda abordagem é a melhor. No entanto, eu sugeriria uma pequena mudança - em vez de armazenar uma matriz de [name, slug] , torne os campos explícitos criando um subdocumento de tag como neste exemplo post documento:
{
    "_id" : ObjectId("4ee33229d8854784468cda7e"),
    "title" : "My Post",
    "content" : "This is a post with some tags",
    "tags" : [
        {
            "name" : "meta",
            "slug" : "34589734"
        },
        {
            "name" : "post",
            "slug" : "34asd97x"
        },
    ]
}

Você pode consultar postagens com uma tag específica usando notação de ponto assim:
db.test.find({ "tags.name" : "meta"})

Porque tags é uma matriz, o mongo é inteligente o suficiente para corresponder a consulta a qualquer elemento da matriz em vez da matriz como um todo, e a notação de ponto permite que você corresponda a um campo específico.

Para consultar postagens não contendo uma tag específica, use $ne :
db.test.find({ "tags.name" : { $ne : "fish" }})

E para consultar posts contendo uma tag mas não a outra, use $and :
db.test.find({ $and : [{ "tags.name" : { $ne : "fish"}}, {"tags.name" : "meta"}]})

Espero que isto ajude!