Mongodb kann damit umgehen, was Sie wollen, wenn Sie Ihre Objekte so speichern
{ score:2131, attributes: ["attr1", "attr2", "attr3"], ... }
Dann stimmt die folgende Abfrage mit allen Elementen überein, die att1 und attr2 haben
c = db.mycol.find({ attributes: { $all: [ "attr1", "attr2" ] } })
aber das passt nicht dazu
c = db.mycol.find({ attributes: { $all: [ "attr1", "attr4" ] } })
die Abfrage gibt einen Cursor zurück, wenn Sie möchten, dass dieser Cursor sortiert wird, dann fügen Sie einfach die Sortierparameter wie folgt zur Abfrage hinzu
c = db.mycol.find({ attributes: { $all: [ "attr1", "attr2" ] }}).sort({score:1})
Sehen Sie sich Erweiterte Abfragen an um zu sehen, was möglich ist.
Geeignete Indizes können wie folgt eingerichtet werden
db.mycol.ensureIndex({attributes:1, score:1})
Und Sie können Leistungsinformationen mit
abrufendb.mycol.find({ attributes: { $all: [ "attr1" ] }}).explain()
Mongo erklärt, wie viele Objekte gescannt wurden, wie lange der Vorgang gedauert hat und verschiedene andere Statistiken.