使用するタグとそれぞれのスラッグが変更される可能性が低い場合は、2番目のアプローチの方が適していると思います。ただし、[name, slug]
の配列を格納するのではなく、小さな変更をお勧めします。 、この例のpost
のようにタグサブドキュメントを作成して、フィールドを明示的にします。 ドキュメント:
{
"_id" : ObjectId("4ee33229d8854784468cda7e"),
"title" : "My Post",
"content" : "This is a post with some tags",
"tags" : [
{
"name" : "meta",
"slug" : "34589734"
},
{
"name" : "post",
"slug" : "34asd97x"
},
]
}
次に、ドット表記を使用して、特定のタグが付いた投稿をクエリできます。 このように:
db.test.find({ "tags.name" : "meta"})
tags
は配列であり、mongoは、配列全体ではなく配列の任意の要素に対してクエリを照合するのに十分賢いです。ドット表記を使用すると、特定のフィールドと照合できます。
投稿をクエリするには 特定のタグが含まれている場合は、$ne
を使用します :
db.test.find({ "tags.name" : { $ne : "fish" }})
また、一方のタグを含み、もう一方のタグを含まない投稿をクエリするには、$and
を使用します :
db.test.find({ $and : [{ "tags.name" : { $ne : "fish"}}, {"tags.name" : "meta"}]})
これがお役に立てば幸いです!