def get_n_subs_n_serv(): r = defaultdict(dict) service_pipeline = [ { "$unwind": "$service" }, { "$group": { "_id": "$managed_object", "service_sum": { "$sum": "$service.summary" } } }, ] for doc in ServiceSummary._get_collection().aggregate( service_pipeline): r[doc["_id"]]["n_services"] = doc["service_sum"] subscriber_pipeline = [ { "$unwind": "$subscriber" }, { "$group": { "_id": "$managed_object", "subscriber_sum": { "$sum": "$subscriber.summary" }, } }, ] for doc in ServiceSummary._get_collection().aggregate( subscriber_pipeline): r[doc["_id"]]["n_subscribers"] = doc["subscriber_sum"] return r
def get_objects_summary_met(mos_ids, info_all=False): kk = {} pipeline = [] name = "service" if not info_all: pipeline += [{"$match": {"managed_object": {"$in": mos_ids}}}] group = { "_id": { "mo": "$managed_object" }, "count": { "$push": "$%s.profile" % name } } pipeline += [{"$unwind": "$%s" % name}, {"$group": group}] for ss in (ServiceSummary._get_collection().with_options( read_preference=ReadPreference.SECONDARY_PREFERRED).aggregate( pipeline)): kk[ss["_id"]["mo"]] = ss["count"] return kk