MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie implementiert man Post-Tags in Mongo?

Wenn sich die von Ihnen verwendeten Tags und ihre jeweiligen Slugs wahrscheinlich nicht ändern, denke ich, dass Ihr zweiter Ansatz der bessere ist. Ich würde jedoch eine kleine Änderung vorschlagen - anstatt ein Array von [name, slug] zu speichern , machen Sie die Felder explizit, indem Sie ein Tag-Filialdokument erstellen, wie in diesem Beispiel 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"
        },
    ]
}

Sie können dann mithilfe der Punktnotation nach Beiträgen mit einem bestimmten Tag suchen so:

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

Weil tags ein Array ist, ist Mongo clever genug, um die Abfrage mit jedem Element des Arrays abzugleichen, und nicht mit dem Array als Ganzes, und die Punktnotation ermöglicht Ihnen den Abgleich mit einem bestimmten Feld.

Nach Beiträgen nicht suchen die ein bestimmtes Tag enthalten, verwenden Sie $ne :

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

Und um nach Beiträgen zu suchen, die ein Tag, aber nicht das andere enthalten, verwenden Sie $and :

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

Hoffe, das hilft!