MongoDB聚合管道内如何将文档转为含node和cursor的edges结构?
MongoDB聚合管道转换为edges结构解决方案
直接用$project先构造单个文档的edge格式,再通过$group将所有edge收集到edges数组中,就能在聚合管道内完成转换,无需后续处理:
db.collection.aggregate([ // 构造单个edge对象,包含完整原文档和_id作为cursor { $project: { edge: { node: "$$ROOT", cursor: "$_id" } } }, // 将所有edge聚合为单个结果里的edges数组 { $group: { _id: null, edges: { $push: "$edge" } } }, // 可选:移除结果中的_id字段(不需要可省略) { $project: { _id: 0 } } ])
关键说明
$$ROOT会引用当前管道阶段的完整文档,确保node保留原文档的全部20个字段。$group指定_id: null是为了把所有文档聚合为单个顶层对象,保证最终结构是外层包含edges数组的格式。- 之前用
$map没成功,是因为$map针对的是数组字段的内部元素转换,而这里需要处理顶层的文档集合,先单个构造再聚合是更适配的方式。
内容的提问来源于stack exchange,提问作者Viktor
相关产品推荐
相关产品推荐

