【发布时间】:2020-03-15 12:15:14
【问题描述】:
我试图在图表查找后查找与评论相关的所有投票,但它不起作用。
我正在尝试以递归方式获取线程的 cmets/votes。
我有 3 个架构:
cmets
- _id
- points
- content
- userId
- parentId
- parentThreadId
线程
- _id
- upvotes
- downvotes
- title
- content
- userName
投票
- _id
- vote
- commentId
- userId
问题是评论有两个键。一个是“parentId”,另一个是“parentThreadId”。只有当评论是另一个评论的子评论时才会设置 parentId,并且只要它是线程下的顶级评论,就会设置 parentThreadId。
使用此代码,我只收到与顶级评论相关的投票(因此使用 parentThreadId 而不是所有 cmets 的投票)。
const threadId = req.params.id;
const ObjectId = mongoose.Types.ObjectId;
Thread.aggregate([
{
$match: {_id : ObjectId(threadId)}
},
{
$lookup:
{
from: 'comments',
as: 'comments',
pipeline: [
{
$match: {parentThreadId : ObjectId(threadId)}
},
{
$graphLookup: {
from: "comments",
startWith: "$_id",
connectFromField: "_id",
connectToField: "parentId",
as: "children",
depthField: "level",
}
},
{
$lookup :
{
from: 'votes',
localField: '_id',
foreignField: 'commentId',
as: 'votes'
}
},
]
}
}
]).
有人知道如何做到这一点吗?
【问题讨论】:
标签: javascript mongodb recursion mongoose nosql