Mongodb zvládne, co chcete, pokud jste své objekty uložili takto
{ score:2131, attributes: ["attr1", "attr2", "attr3"], ... }
Potom bude následující dotaz odpovídat všem položkám, které mají att1 a attr2
c = db.mycol.find({ attributes: { $all: [ "attr1", "attr2" ] } })
ale toto se tomu nevyrovná
c = db.mycol.find({ attributes: { $all: [ "attr1", "attr4" ] } })
dotaz vrátí kurzor, pokud chcete, aby byl tento kurzor seřazen, pak stačí přidat parametry řazení do dotazu takto
c = db.mycol.find({ attributes: { $all: [ "attr1", "attr2" ] }}).sort({score:1})
Podívejte se na Pokročilé dotazy abyste viděli, co je možné.
Vhodné indexy lze nastavit následovně
db.mycol.ensureIndex({attributes:1, score:1})
A můžete získat informace o výkonu pomocí
db.mycol.find({ attributes: { $all: [ "attr1" ] }}).explain()
Mongo vysvětluje, kolik objektů bylo naskenováno, jak dlouho operace trvala a různé další statistiky.