Możesz spróbować:
key_list = ["animal.dog", "animal.dog.tail", "animal.cat", "tree", "fruits", "timestamp"]
match = { "$match": { "cid": ObjectId("57fe39972b8dbc1387b20913") } }
project = { "$project": {} }
group = { "$group": {} }
for item in key_list:
if item == "timestamp":
project["$project"]["day"] = { "$substr": ["$"+item, 0, 10] }
group["$group"]["_id"] = "$day"
break
sum = {"$sum": ""}
sum["$sum"] = "$"+item.replace(".", "_")
project["$project"][item.replace(".", "_")] = "$"+item
group["$group"][item.replace(".", "_")] = sum
pipeline = [match, project, group]