как управлять find(), чтобы получить всех дочерних элементов с родительским комментарием

#mongodb #mongoose #mongoose-schema

#mongodb #мангуст #мангуст-схема

Вопрос:

Я большой специалист в mongoose, я реализую концепцию комментариев. Фактически, я создаю комментарий к схеме, в котором я идентифицирую разные поля, как показано:

 import mongoose from 'mongoose';
/* eslint-disable-next-line */
import db from './db';

// Define Schema method= mongoose;
const { Schema } = mongoose;
const CommentSchema = new Schema({
  id: {
    type: String,
    required: true,
    unique: true,
  },
  author_id: {
    type: String,
    required: true,
  },
  content: {
    type: String,
  },
  creation_date: {
    type: Date,
    default: Date.now,
  },
  interesting_comment: [String],
  updated_content_list: [{ previous_date: Date, previous_content: String }],
  children: [String],
});
export default mongoose.model('Comment', CommentSchema);
 

Примечание: children — это ответ на родительский комментарий, вот пример:

 {
    "_id" : ObjectId("60217951f57f24079f885d66"),
    "interesting_comment" : [
        "6ff10e9"
    ],
    "children" : [
        "c13e5487-07ba-4bc9-996e-ef1c8f826b32"
    ],
    "updated_content_list" : [ ],
    "id" : "6f169ee4-d22d-49a2-9f71-5dacadecf6bb",
    "author_id" : "b08a3310-b3f4-4521-9b1a-2d5667a3ea1d",
    "content" : "Hello wijdene",
    "creation_date" : ISODate("2021-02-08T17:48:01.026Z"),
    "__v" : 4
}
{
    "_id" : ObjectId("602179d1f57f24079f885d68"),
    "interesting_comment" : [ ],
    "children" : [ ],
    "updated_content_list" : [ ],
    "id" : "c13e5487-07ba-4bc9-996e-ef1c8f826b32",
    "author_id" : "111",
    "content" : "hi nesrine",
    "creation_date" : ISODate("2021-02-08T17:50:09.075Z"),
    "__v" : 0
}
 

Я реализую эту функцию:

 async function ListComment() {
  const comments = await Comment.find();
  return comments;
}
 

Я хочу получить всех детей по их родительскому комментарию, я трачу часы и не понимаю, какая помощь, пожалуйста

Комментарии:

1. Вы пробовали использовать $graphLookup ?

2. Спасибо за ваш ответ, я попробую с этим справиться, я понятия не имею об этом

3. асинхронная функция ListComment() {const comments = await Comment.aggregate([{$unwind:{path:»$children»,preserveNullAndEmptyArrays: true}},{$lookup:{from:»комментарии»,localField:»дочерние элементы»,foreignField:»идентификатор»,как: «дочерние элементы»}}]); возвращать комментарии; } Я пытаюсь таким образом, но я хочу удалить дочерний элемент

Ответ №1:

Я пытаюсь исправить эту проблему с помощью поиска:

 async function ListComment() {
  const comments = await Comment.aggregate([{$unwind:{path:"$children",preserveNullAndEmptyArrays: true}},{$lookup:{from:"comments",localField:"children",foreignField:"id",as:"children"}}]);
  return comments;
}
 

Но даже у ребенка это проявляется таким образом. Фактически, я добавляю preserveNullAndEmptyArrays: true для сохранения родительского элемента, который не содержит дочернего элемента. Но то, что я получаю, — это новая комбинация родитель без детей дети. Я хочу удалить детей, есть какие-нибудь идеи