pymon go самая эффективная агрегация для пересечений - PullRequest
1 голос
/ 10 июля 2020

Имея список функций как [a, b, c], набор, состоящий из двух записей полей, как:

(obj1, [a, x, z, y]), (obj2, [a, b]), (obj3, [a, b, x, y]), (obj4, [a, b, c, d]), (obj5, [a, b, c, w])

и желаемый результат как: (3, [obj4, obj5]), содержащий наиболее часто встречающиеся числа, найденные в списках записей вместе со связанным объектом.

Интересно, какое агрегирование является наиболее эффективным для достижения этого. Моя следующая, даже я знаю, что использование $ project изменяет индексы, поэтому запрос становится неэффективным:

 aggr = db.clauses.aggregate([
        {"$project": {
            "value": 1,
            "intersection": {"$size": {"$setIntersection": ["$features", features]}}
        }},
        {"$group":
             {"_id": "$intersection",
              "group": {"$push": "$value"}}},
        {"$sort": {"_id": -1}},
        {"$limit": 1}
    ])
...