mongoDB存在一些问题-如何在组条件下获取最后一行值

mongoDB存在一些问题-如何在组条件下获取最后一行值,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我和mongo有些问题 如果存在,我需要获取行的姓氏。 蒙戈文件 { _id:对象。。。 活动:1 总数:1 ...: . .. 活动名称:“活动名称” }, { _id:对象。。。 活动:2 总数:3 ...: . .. 活动名称:“活动2的名称” }, { _id:对象。。。 活动:1 总数:1 ...: . .. 活动名称:“活动的z名称” }, { _id:对象。。。 活动:1 总数:6 ...: . .. } 他如何看待“活动名称”在收藏的树上的位置缺失了 如果我这样做: db.

我和mongo有些问题

如果存在,我需要获取行的姓氏。 蒙戈文件

{
_id:对象。。。
活动:1
总数:1
...: .
..
活动名称:“活动名称”
}, { _id:对象。。。 活动:2 总数:3 ...: . .. 活动名称:“活动2的名称”
}, { _id:对象。。。 活动:1 总数:1 ...: . .. 活动名称:“活动的z名称”
}, { _id:对象。。。 活动:1 总数:6 ...: . .. }
他如何看待“活动名称”在收藏的树上的位置缺失了

如果我这样做:

db.dataweek.aggregate([{
$项目:{
“活动名称”:1
}
}, {
$group:{
_id:{“$\u id”,“$campaign”},
活动名称:{
$last:“$campaigname”
},
总数:{
$sum:“$total”
}
}
}])
如果所有最后一行都有一个字段
activityname
,我会得到结果
ok
,如果没有,我会得到该字段的空名称

我的问题是如何获取存在的最后一个
活动名称
值(组活动)

结果应该是:


活动:1
总数:8
..
活动名称:“活动的z名称”

活动:2 总数:3 .. 活动名称:“活动2的名称”

。。。。

您可以看到活动1的名称已更改

PS.$first无效,我需要存在last campaignName,但不同于“”

简而言之,在分组之前,您需要先查看文档,以便预期结果为last。考虑以下样本:

{“a”:1,“title”:“here”}
{“a”:1}
{“a”:1,“标题”:“there”}
{“a”:2}
{“a”:2,“标题”:“此处”}
{“a”:2,“标题”:“那里”}
{“a”:1}
{“a”:2}
因此,在按“a”分组并获取计数时,要查找最后一个有效的“标题”,请首先按分组键和“标题”进行排序。不包含标题的条目将首先列出:

db.collection.aggregate([
{“$sort”:{“a”:1,“title”:1},
{“$组”:{
“_id”:“$a”,
“title”:{“$last”:“$title”},
“总计”:{“$sum”:1}
}}
])
当然,结果在该字段上排序,因此在本例中,“t”将位于“h”之后。因此,如果您有另一个结果要“排序”,例如“日期”,这很重要,那么您应该首先将其包括在排序顺序中:

{“$sort”:{“a”:1,“date”:1,“title”:1}
但真的没有其他方法来确保这一点,因为你不能说

“如果该值存在,则为最后一个”

查询部分的子句将删除不存在的条目,从而更改结果的“计数”。有一个运算符可以计算字段是否存在,并交替返回另一个值,但如果没有“排序”,这对您来说真的没有用


还请注意,对于单个字段,如果您不查找多个字段或其他排序条件下的“最后一个”条目,则操作员无需应用排序即可执行相同操作。

,提供一个示例,说明数据的外观以及聚合后希望从MongoDB获得什么?如果每个文档都有一个活动名称,那么按_id分组将如何解决您的问题?听起来你只是想:
db.c.find().sort({campaignNBame:-1})。limit(1)
你的答案很好,但对我来说不是。。活动名称可以更改为d。。我需要更改最后一个值!=''。。请参见添加新文档。。