>

주제 시스템을 만들고 싶습니다. 각 주제에는 주제 인 하위 주제가있을 수 있습니다. 하위 주제에도 하위 주제가있을 수 있습니다. 예를 들어 예제 이미지

주제 스키마를 만들고 주제 스키마를 나타내는 하위 주제 필드를 추가하려고했습니다. 이 스키마 코드를 작동시키지 못하는 것 같습니다 :

const mongoose = require('mongoose');
const TopicSchema = new mongoose.Schema({
    name: {type:String,unique:true},
    sub_topic:[{type:mongoose.Schema.Types.ObjectId, ref : 'Topic'}] 
});
const Topic =mongoose.model('Topic', TopicSchema);
module.exports = Topic;

또한 서버로 보내는 데이터는 새로운 인스턴스를 만드는 것처럼 보일까요? 서버에서 어떻게 저장합니까?

지금 다음과 같이 저장하려고합니다. const topic = new Topic ();

topic.name = req.body.name;
topic.sub_topic.name=req.body.sub_topic

그리고 보내는 데이터 메신저는 : (json)

{
    "name":"TestMain",
    "sub_topic":[{"name":"TestSub"}]            
}

UPDATE : got this done using a recursive function.

function subtopicHandler(topic, sub_topic) {
    Topic.find({
      "name": topic.name
    }, function (err, res) {
      if (err) throw err
      return;
    })
    if (sub_topic == undefined) {
      let ntopic = new Topic();
      ntopic.name = topic.name;
      ntopic.sub_topic == undefined;
      ntopic.save(function (err, result) {
        if (err) console.log('saving err', err)
      });
      return ntopic._id;
    }
    let mainTopic = new Topic();
    mainTopic.name = topic.name;
    sub_topic.forEach(function (sub) {
      mainTopic.sub_topic.push(subtopicHandler(sub, sub.sub_topic));
    })
    var retME;
    mainTopic.save(function (err, result) {
      if (err) {
        console.log('saving err', err)
        throw err;
      }
    });
    return mainTopic._id;
  }

이 스키마 사용 :

const TopicSchema = new mongoose.Schema({
    name: {type:String,unique:true},
    sub_topic:[{type:mongoose.Schema.Types.ObjectId, ref : 'Topic'}] 
});

및 다음으로 전송 된 데이터 :

{
    "name":"A",
    "sub_topic":[
                    {"name":"C","sub_topic":
                        [
                            {"name":"C1"}
                            ,
                            {"name":"C2"}
                        ]
                    }
                    ,
                    {"name":"B"}
                    ,
                    {"name":"D","sub_topic":
                        [
                            {"name":"D1"}
                            ,
                            {"name":"D2"}
                            ,
                            {"name":"D3"}
                        ]
                    }
                ]            
}

API 엔드 포인트로

이 방법으로 처리 :

let mainTopic = new Topic();
    mainTopic.name = req.body.name;
    subtopicHandler(mainTopic, req.body.sub_topic);
  })


  • 답변 # 1

    다음 json을 보내는 경우

    const obj = {
        "name":"TestMain",
        "sub_topic":[{"name":"TestSub"}]            
    }
    
    

    그럼

    let mainTopic = new Topic();
    let subTopic = new Topic();
    // assuming for now you have only one sub-topic in array
    subTopic.name = obj[0].name;
    subTopinc.save(function(err,result)=>{
        if(!err){
            mainTopic.name = obj.name;
            mainTopic.sub_topic = [result._id]
            mainTopic.save(function(err,result){
                console.log(result);
            })
        }
    });
    
    

    스키마 정의와 주어진 json에서 위 단계를 따라 결과를 얻을 수 있습니다.

    이것이 도움이되기를 바랍니다.

  • 답변 # 2

    서브 문서로이 작업을 수행 할 수 있습니다. 설명서를 확인하십시오.

    https://mongoosejs.com/docs/subdocs.html

  • 이전 spss의 첫 번째 및 마지막 ID 구문
  • 다음 oop - 스몰 토크 - 메시지 발신자는 무엇입니까?