sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur implementerar man inläggstaggar i Mongo?

Om taggarna du använder och deras respektive sniglar sannolikt inte kommer att ändras, tror jag att ditt andra tillvägagångssätt är det bättre. Men jag skulle föreslå en liten ändring - snarare än att lagra en array av [name, slug] , gör fälten explicita genom att skapa ett taggunderdokument som i det här exemplet 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"
        },
    ]
}

Du kan sedan fråga efter inlägg med en viss tagg med punktnotation så här:

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

Eftersom tags är en array, är mongo smart nog att matcha frågan mot valfritt element i arrayen snarare än arrayen som helhet, och dot-notation låter dig matcha mot ett visst fält.

Att fråga efter inlägg inte som innehåller en specifik tagg, använd $ne :

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

Och för att fråga efter inlägg som innehåller en tagg men inte den andra, använd $and :

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

Hoppas detta hjälper!




  1. mongoDB 2.2.1 - databas ogiltig

  2. Kapslade $addFields i MongoDB

  3. kan inte uppdatera ett dokument via 'findById' och save() med löfte

  4. det går inte att starta mongodb lokal server