Mongo 聚合计数子文档(计数回复评论)
Posted
技术标签:
【中文标题】Mongo 聚合计数子文档(计数回复评论)【英文标题】:Mongo Aggregation Count Child Documents (Count Replies For Comments) 【发布时间】:2020-03-27 10:26:14 【问题描述】:我有一个名为 comments
的集合,其结构类似于:
_id: ObjectId(),
slug: 'foo',
text: 'I am a comment'
,
_id: ObjectId(),
slug: 'foo/bar',
parentSlug: 'foo',
text: 'I am a reply'
,
_id: ObjectId(),
slug: 'foo/bar/baz',
parentSlug: 'foo/bar',
text: 'I am a reply to a reply'
我想获取某个级别的 cmets 并添加每个级别的回复数(其中 parentSlug 等于评论 slug)。
_id: ObjectId(),
slug: 'foo',
text: 'I am a comment',
replyCount: 1
我认为 Mongo 聚合可以做到这一点,但我不确定我需要哪些聚合阶段以及它们的结构。
【问题讨论】:
【参考方案1】:这里基本上需要$graphLookup
db.collection.aggregate([
$graphLookup:
from: "collection",
startWith: "$slug",
connectFromField: "slug",
connectToField: "parentSlug",
as: "replyCount",
maxDepth: 2,
depthField: "d"
,
$addFields:
replyCount: $size: "$replyCount"
])
MongoPlayground
【讨论】:
在阅读了有关 $graphLookup 功能的文档的更多内容后,它真的很整洁!虽然我有点难过,但是为什么 replyCount 总是回到零 - 结果我不得不将from: "collection",
更改为 from: "comments",
以匹配正确的集合?♂️以上是关于Mongo 聚合计数子文档(计数回复评论)的主要内容,如果未能解决你的问题,请参考以下文章