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
相关产品推荐
相关产品推荐

