Mongodb може да се справи с това, което искате, ако сте съхранили вашите обекти по този начин
{ score:2131, attributes: ["attr1", "attr2", "attr3"], ... }
Тогава следната заявка ще съответства на всички елементи, които имат att1 и attr2
c = db.mycol.find({ attributes: { $all: [ "attr1", "attr2" ] } })
но това няма да съответства
c = db.mycol.find({ attributes: { $all: [ "attr1", "attr4" ] } })
заявката връща курсор, ако искате този курсор да бъде сортиран, тогава просто добавете параметрите за сортиране към заявката по следния начин
c = db.mycol.find({ attributes: { $all: [ "attr1", "attr2" ] }}).sort({score:1})
Разгледайте Разширени заявки за да видите какво е възможно.
Подходящите индекси могат да бъдат настроени както следва
db.mycol.ensureIndex({attributes:1, score:1})
И можете да получите информация за производителността чрез
db.mycol.find({ attributes: { $all: [ "attr1" ] }}).explain()
Mongo обяснява колко обекта са били сканирани, колко време е отнела операцията и различни други статистики.