Имея список функций как [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}
])