sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB design - taggar

Jag skulle förmodligen gå med ett schema som detta, som lagrar taggarna i ett strängarrayfält:

db.movies.insert({
    name: "The Godfather",
    director: "Francis Ford Coppola",
    tags: [ "mafia", "wedding", "violence" ]
})

db.movies.insert({
    name: "Pulp Fiction",
    director: "Quentin Tarantino",
    tags: [ "briefcase", "violence", "gangster" ]
})

db.movies.insert({
    name: "Inception",
    director: "Christopher Nolan",
    tags: [ "dream", "thief", "subconscious" ]
})

Du skulle inte behöva map-reduce för den här typen av sökning. Genom att bädda in taggarna i filmdokumentet kan du dra fördel av MongoDB:s multikey funktion och hitta filmer med en given tagg med en enda find() fråga så här:

db.movies.find( { tags: "dream" } )

Och som du sa, det är också värt att lägga till ett index till multikey-arrayen för att förbättra frågeprestanda:

db.movies.ensureIndex( { tags: 1 } )


  1. mongoose-uppdatering:$inc fungerar inte i upsert

  2. Filtrera undermatrisen för en matris efter vissa kriterier

  3. hur man tar bort array med värdet null efter unset i mongodb

  4. Sortera med MongoEngine?