Mongodb poradzi sobie z tym, co chcesz, jeśli przechowujesz swoje obiekty w ten sposób
{ score:2131, attributes: ["attr1", "attr2", "attr3"], ... }
Następnie poniższe zapytanie dopasuje wszystkie elementy, które mają att1 i attr2
c = db.mycol.find({ attributes: { $all: [ "attr1", "attr2" ] } })
ale to nie pasuje
c = db.mycol.find({ attributes: { $all: [ "attr1", "attr4" ] } })
zapytanie zwraca kursor, jeśli chcesz, aby ten kursor został posortowany, po prostu dodaj parametry sortowania do zapytania w ten sposób
c = db.mycol.find({ attributes: { $all: [ "attr1", "attr2" ] }}).sort({score:1})
Zobacz Zaawansowane zapytania aby zobaczyć, co jest możliwe.
Odpowiednie indeksy można skonfigurować w następujący sposób
db.mycol.ensureIndex({attributes:1, score:1})
Informacje o wydajności można uzyskać za pomocą
db.mycol.find({ attributes: { $all: [ "attr1" ] }}).explain()
Mongo wyjaśnia, ile obiektów zostało zeskanowanych, jak długo trwała operacja i różne inne statystyki.