如果你像这样存储对象,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})
看一下高级查询 http://www.mongodb.org/display/DOCS/Advanced+Queries看看有什么可能。
可以设置适当的索引,如下所示
db.mycol.ensureIndex({attributes:1, score:1})
您可以使用以下方式获取性能信息
db.mycol.find({ attributes: { $all: [ "attr1" ] }}).explain()
Mongo 解释了扫描了多少对象、操作花费了多长时间
以及其他各种统计数据。