Я должен управлять стеной с комментариями, у каждой стены есть много родительских комментариев, а у каждого родительского комментария есть дочерние комментарии.
моя коллекция стены похожа на
groupId : {type: Schema.Types.ObjectId, ref: 'groups', unique: true},
comments : [{
commentId : {type: Schema.Types.ObjectId, ref: 'comments'},
memberId : {type: Schema.Types.ObjectId, ref: 'members'},
}],
и коллекция комментариев похожа на это
text : String,
parentCommentId : {type: Schema.Types.ObjectId, ref: 'comments', default : null},
Я хочу отобразить мою стену с помощью родительских комментариев, каждый дочерний комментарий под родительским комментарием.
, но результат в mon go db не сортируется все время, сортировка кажется случайной,
1 - Как отсортировать массив childs с полем (childs.createdAt)
2 - Как отобразить только эти поля в дочерних элементах (_id / date / creationAt) и эти поля (_id / childs / date) в комментариях массива
query
db.walls.aggregate([
{
$lookup: {
from: "comments",
let: {
commentIds: "$comments.commentId"
},
pipeline: [
{
$match: {
$expr: {
$in: [
"$_id",
"$$commentIds"
]
},
parentCommentId: null
}
},
{
$graphLookup: {
from: "comments",
startWith: "$_id",
connectFromField: "parentCommentId",
connectToField: "parentCommentId",
as: "childs"
}
}
],
as: "comments"
}
}
])
данные
https://mongoplayground.net/p/XTu0yeLTMMr
Как я могу изменить свой запрос? спасибо.