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!