【发布时间】:2019-03-22 17:49:03
【问题描述】:
我想制作一个主题系统。每个主题都可能有子主题,这些子主题也是主题。 这意味着子主题也可能有子主题。 例如 example image
我尝试创建一个主题架构并添加一个子主题字段,该字段也将引用主题架构。 似乎无法使我的架构代码正常工作:
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;
另外,我发送到服务器的数据应该是什么样子才能创建一个新实例? 在服务器上如何保存?
我现在尝试像这样保存: 常量主题 = 新主题();
topic.name = req.body.name;
topic.sub_topic.name=req.body.sub_topic
我发送的数据是:(json)
{
"name":"TestMain",
"sub_topic":[{"name":"TestSub"}]
}
更新:使用递归函数完成此操作。
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);
})
【问题讨论】:
标签: javascript node.js mongodb mongoose