Mongodb può gestire ciò che vuoi, se hai archiviato i tuoi oggetti in questo modo
{ score:2131, attributes: ["attr1", "attr2", "attr3"], ... }
Quindi la query seguente corrisponderà a tutti gli elementi che hanno att1 e attr2
c = db.mycol.find({ attributes: { $all: [ "attr1", "attr2" ] } })
ma questo non corrisponderà
c = db.mycol.find({ attributes: { $all: [ "attr1", "attr4" ] } })
la query restituisce un cursore, se vuoi che questo cursore sia ordinato, aggiungi semplicemente i parametri di ordinamento alla query in questo modo
c = db.mycol.find({ attributes: { $all: [ "attr1", "attr2" ] }}).sort({score:1})
Dai un'occhiata a Query avanzate per vedere cosa è possibile.
Gli indici appropriati possono essere impostati come segue
db.mycol.ensureIndex({attributes:1, score:1})
E puoi ottenere informazioni sulle prestazioni utilizzando
db.mycol.find({ attributes: { $all: [ "attr1" ] }}).explain()
Mongo spiega quanti oggetti sono stati scansionati, quanto tempo è durata l'operazione e varie altre statistiche.