Mongodb kan hantera vad du vill, om du lagrade dina objekt så här
{ score:2131, attributes: ["attr1", "attr2", "attr3"], ... }
Då kommer följande fråga att matcha alla objekt som har att1 och attr2
c = db.mycol.find({ attributes: { $all: [ "attr1", "attr2" ] } })
men detta kommer inte att matcha det
c = db.mycol.find({ attributes: { $all: [ "attr1", "attr4" ] } })
frågan returnerar en markör, om du vill att den här markören ska sorteras, lägg bara till sorteringsparametrarna till frågan så här
c = db.mycol.find({ attributes: { $all: [ "attr1", "attr2" ] }}).sort({score:1})
Ta en titt på Avancerade frågor för att se vad som är möjligt.
Lämpliga index kan ställas in enligt följande
db.mycol.ensureIndex({attributes:1, score:1})
Och du kan få prestandainformation med
db.mycol.find({ attributes: { $all: [ "attr1" ] }}).explain()
Mongo förklarar hur många objekt som skannades, hur lång tid operationen tog och diverse annan statistik.