Пн go Агрегация Количество дочерних документов (Количество ответов для комментариев) - PullRequest
1 голос
/ 27 марта 2020

У меня есть коллекция с именем 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'
}

Я хочу получить комментарии для определенного уровня и добавить количество ответов для каждого (где parentSlug равен к комментарию))

{
  _id: ObjectId(),
  slug: 'foo',
  text: 'I am a comment',
  replyCount: 1
}

Я думаю, что это возможно с агрегацией Mon go, но я не уверен, какие стадии агрегации мне нужны и как они будут структурированы.

1 Ответ

1 голос
/ 27 марта 2020

Вам в основном нужно $graphLookup здесь

db.collection.aggregate([
  { $graphLookup: {
    from: "collection",
    startWith: "$slug",
    connectFromField: "slug",
    connectToField: "parentSlug",
    as: "replyCount",
    maxDepth: 2,
    depthField: "d"
  }},
  { $addFields: {
    replyCount: { $size: "$replyCount" }
  }}
])

MongoPlayground

...