如果查询中的所有元素都是硬编码的,那么我将尝试根据时间戳执行聚合(按天)。
pipe = [
{
"$match": {
"cid": ObjectId("57fe39972b8dbc1387b20913")
}
},
{
"$project":
{
"animal_dog": "$animal.dog",
"animal_dog_tail": "$animal.dog.tail",
"animal_cat": "$animal.cat",
"tree": "$fruits",
"day": {"$substr": ["$timestamp", 0, 10]}
}},
{
"$group":
{
"_id" : "$day",
"animal_dog" : {"$sum": "$animal_dog"},
"animal_dog_tail": {"$sum": "$animal_dog_tail"},
"animal_cat": {"$sum": "$animal_cat"},
"tree": {"$sum": "$tree"},
"fruits": {"$sum": "$fruits"},
}} ]
output = dailycollection.aggregate(pipeline = pipe)
假设我有一个具有完全相同嵌套结构的mongo集合,那么如何传递一个python\u列表,其中包含基于时间戳进行聚合的各个元素?
假设我的Python列表包含如下元素:
key\u列表=
animal.dog, animal.dog.tail, animal.cat, tree, fruits, timestamp
.
我想将此列表传递到我刚才编写的查询中,而不必对每个元素进行硬编码。我想表演
projection
,
$sum
,
$group
对于没有像我在前面的查询中那样硬编码的元素。我只想在
$project
和
$组
阶段
这可能吗?
还有,如何确保输出查询也保留相同的嵌套格式而不丢失深度?