#node.js #mongodb #express
Вопрос:
я хочу создать вложенный комментарий с мангустом и Node.js(Экспресс) и я хочу, чтобы мои комментарии на веб-сайте не имели ограничений по вложенности и могли отвечать друг другу бесконечно. У тебя есть идея на этот счет?!!!!! Моя модель такая :
const mongoose = require("mongoose");
const Schema = mongoose.Schema;
const commentSchema = new Schema({
user: { type: mongoose.Types.ObjectId, ref: "user", required: true },
text: { type: String, required: true },
blog: { type: mongoose.Types.ObjectId, ref: "blog", default: undefined },
course: { type: mongoose.Types.ObjectId, ref: "course", default: undefined },
show: { type: Boolean, default: false },
parent: { type: mongoose.Types.ObjectId, ref: "comment", default: undefined }
}, {
timestamps: true,
toJSON: {
virtuals: true
}
})
commentSchema.virtual("children", {
ref: "comment",
localField: "_id",
foreignField: "parent"
})
const commentModel = mongoose.model("comment", commentSchema);
module.exports = commentModel;
я хочу, чтобы мои комментарии выглядели так
, я очень ищу и спрашиваю на форумах, Некоторые люди говорили мне использовать графики, я сделал это, но я не получил ответа
"comments": [
{
"show": false,
"_id": "60e6952102429a2d40da865b",
"text": "comment",
"blog": "60e67836205c8932c06343d9",
"user": {
"_id": "60e4983c0310031c7011ca3f",
"name": "test",
"email": "test@google.com"
},
"createdAt": "2021-07-08T06:03:13.473Z",
"updatedAt": "2021-07-08T06:03:13.473Z",
"__v": 0,
"children": [
{
"show": false,
"_id": "60e6956102429a2d40da8667",
"text": "child 3",
"blog": "60e67836205c8932c06343d9",
"parent": "60e6952102429a2d40da865b",
"user": {
"_id": "60e4983c0310031c7011ca3f",
"name": "test",
"email": "test@google.com"
},
"createdAt": "2021-07-08T06:04:17.348Z",
"updatedAt": "2021-07-08T06:04:17.348Z",
"__v": 0,
"children": [
{
"show": false,
"_id": "60e6956102429a2d40da8667",
"text": "child 3",
"blog": "60e67836205c8932c06343d9",
"parent": "60e6952102429a2d40da865b",
"user": {
"_id": "60e4983c0310031c7011ca3f",
"name": "test",
"email": "test@google.com"
},
"createdAt": "2021-07-08T06:04:17.348Z",
"updatedAt": "2021-07-08T06:04:17.348Z",
"__v": 0,
"children": [childs.... , children[childs....]],
"id": "60e6956102429a2d40da8667"
}
],
"id": "60e6956102429a2d40da8667"
}
],
"id": "60e6952102429a2d40da865b"
},
Комментарии:
1. Mongodb предназначен специально для вложенных объектов. Просто сохраните поле комментариев в виде массива комментариев корневого уровня с дочерними полями и продолжайте нажимать его там. Другой способ иметь родительский (один идентификатор ссылки ) и дочерние комментарии (массив идентификаторов) для каждого комментария. Просто заполните содержимое, чтобы получить соответствующие данные.