добавил 200К объектов:
db.events.save({ ‘data’:uuid.uuid1(), ‘tags’:random.sample(tt,5) }) в цикле
выборка 100 элементов идет быстро 0,016 сек
db.events.find({ ‘tags’: { ‘$all’: } }).limit(100)
а вот быстрый выбор тегов не придумал, пока сделал тормазнутый мап-редьюс (9сек):
def get_tags():
from pymongo.code import Code
map = Code(""" function() {
var ok = 0;
for(var i in this.tags) {
if(this.tags[i]=='a') ok += 1;
if(this.tags[i]=='b') ok += 1;
};
if(ok==2)
this.tags.forEach(
function(x) {
emit(x, 1);
}
);
}""")
reduce = Code("""function (key, values) {
var total = 0;
for(var i in values) total += values[i];
return total;
}""")
tags = db.events.map_reduce(map, reduce)
tags = list(tags.find().sort('value',DESCENDING).limit(100))
наверно нужно подготавливать какую-нибудь структуру…