Pokud je nepravděpodobné, že se značky, které používáte, a jejich příslušné slimáky změní, myslím, že váš druhý přístup je lepší. Navrhoval bych však malou změnu – spíše než ukládání pole [name, slug]
, vytvořte pole explicitní vytvořením vnořeného dokumentu značky jako v tomto příkladu 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"
},
]
}
Poté se můžete dotazovat na příspěvky s konkrétní značkou pomocí tečkové notace takhle:
db.test.find({ "tags.name" : "meta"})
Protože tags
je pole, mongo je dostatečně chytré na to, aby odpovídalo dotazu jakémukoli prvku pole, spíše než poli jako celku, a tečková notace vám umožňuje porovnávat s konkrétním polem.
Dotazovat se na příspěvky ne obsahující konkrétní značku, použijte $ne
:
db.test.find({ "tags.name" : { $ne : "fish" }})
A k dotazování na příspěvky obsahující jednu značku, ale ne druhou, použijte $and
:
db.test.find({ $and : [{ "tags.name" : { $ne : "fish"}}, {"tags.name" : "meta"}]})
Doufám, že to pomůže!