You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB C#驱动分组后获取每组数组最后一个元素的查询问题

修正MongoDB C#驱动分组获取数组最后一个元素的查询

你的问题出在$slice和$push的组合用法错误,导致返回了所有元素。根据你的需求,分两种场景给出修正方案:

场景1:收集每组下所有文档的SessionRecords数组最后一个元素

如果你需要按ActivityType分组后,把每个文档里SessionRecords数组的最后一个完整对象都收集到Result数组中,使用以下代码:

var group = new BsonDocument
{
    { "_id", "$ActivityType" },
    {
        "Result", new BsonDocument("$push", new BsonDocument("$last", "$SessionRecords"))
    }
};
  • 用$last: "$SessionRecords"直接提取单个文档中SessionRecords数组的最后一个元素
  • 再通过$push将这些元素汇总到分组的Result数组里

场景2:获取每组的最后一个文档中SessionRecords数组的最后一个元素

如果你只需要每组里最后一个文档的SessionRecords数组最后一个元素,不需要收集所有文档的结果,改用$last替代$push:

var group = new BsonDocument
{
    { "_id", "$ActivityType" },
    {
        "Result", new BsonDocument("$last", new BsonDocument("$last", "$SessionRecords"))
    }
};
  • 内层$last: "$SessionRecords"提取单文档数组的最后一个元素
  • 外层$last在分组内取该结果的最后一个值

针对你的示例数据,场景1的Result会是一个包含1个元素的数组(对应示例文档中SessionRecords的最后一个对象);场景2的Result就是该对象本身,不是数组。

内容的提问来源于stack exchange,提问作者komal patil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 06:54:23