sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Cómo implementar etiquetas de publicación en Mongo?

Si es poco probable que cambien las etiquetas que usa y sus respectivos slugs, creo que su segundo enfoque es el mejor. Sin embargo, sugeriría un pequeño cambio, en lugar de almacenar una matriz de [name, slug] , haga que los campos sean explícitos creando un subdocumento de etiqueta como en este ejemplo 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"
        },
    ]
}

A continuación, puede consultar las publicaciones con una etiqueta en particular utilizando la notación de puntos. así:

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

Porque tags es una matriz, mongo es lo suficientemente inteligente como para hacer coincidir la consulta con cualquier elemento de la matriz en lugar de la matriz como un todo, y la notación de puntos le permite comparar con un campo en particular.

Para consultar publicaciones no que contiene una etiqueta específica, use $ne :

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

Y para consultar publicaciones que contengan una etiqueta pero no la otra, use $and :

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

¡Espero que esto ayude!