MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Come implementare i tag dei post in Mongo?

Se è improbabile che i tag che usi e i rispettivi slug cambino, penso che il tuo secondo approccio sia il migliore. Tuttavia suggerirei una piccola modifica, piuttosto che memorizzare un array di [name, slug] , rendere espliciti i campi creando un documento secondario tag come in questo esempio 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"
        },
    ]
}

Puoi quindi cercare i post con un tag particolare usando la notazione punto così:

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

Perché tags è un array, mongo è abbastanza intelligente da abbinare la query a qualsiasi elemento dell'array piuttosto che all'array nel suo insieme e la notazione a punti consente di confrontare un campo particolare.

Per interrogare i post non contenente un tag specifico, usa $ne :

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

E per cercare post contenenti un tag ma non l'altro, usa $and :

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

Spero che questo aiuti!