Mongodb có thể xử lý những gì bạn muốn, nếu bạn lưu trữ các đối tượng của mình như thế này
{ score:2131, attributes: ["attr1", "attr2", "attr3"], ... }
Sau đó, truy vấn sau sẽ khớp với tất cả các mục có att1 và attr2
c = db.mycol.find({ attributes: { $all: [ "attr1", "attr2" ] } })
nhưng điều này sẽ không khớp với nó
c = db.mycol.find({ attributes: { $all: [ "attr1", "attr4" ] } })
truy vấn trả về một con trỏ, nếu bạn muốn con trỏ này được sắp xếp, thì chỉ cần thêm các tham số sắp xếp vào truy vấn như vậy
c = db.mycol.find({ attributes: { $all: [ "attr1", "attr2" ] }}).sort({score:1})
Hãy xem Truy vấn nâng cao để xem những gì có thể.
Các chỉ mục thích hợp có thể được thiết lập như sau
db.mycol.ensureIndex({attributes:1, score:1})
Và bạn có thể nhận thông tin về hiệu suất bằng cách sử dụng
db.mycol.find({ attributes: { $all: [ "attr1" ] }}).explain()
Mongo giải thích số lượng đối tượng đã được quét, thời gian hoạt động và nhiều số liệu thống kê khác.