Javascript 猫鼬嵌套模式
我想建立一个主题系统。每个主题可能都有子主题,这些子主题也是主题。 这意味着子主题也可能有子主题。 例如 我试图创建一个主题模式,并添加一个副标题字段,该字段也将引用主题模式。 我的架构代码似乎无法实现此功能:Javascript 猫鼬嵌套模式,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我想建立一个主题系统。每个主题可能都有子主题,这些子主题也是主题。 这意味着子主题也可能有子主题。 例如 我试图创建一个主题模式,并添加一个副标题字段,该字段也将引用主题模式。 我的架构代码似乎无法实现此功能: const mongoose = require('mongoose'); const TopicSchema = new mongoose.Schema({ name: {type:String,unique:true}, sub_topic:[{type:mong
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;
另外,要创建新实例,im发送到服务器的数据应该是什么样的?
在服务器上如何保存它
我现在试着这样存钱:
const topic=新主题()
im发送的数据是:(json)
更新:使用递归函数完成此操作
使用此模式:
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);
})
您可以使用子文档执行此操作。请查看文档
如果您发送以下json
const obj = {
"name":"TestMain",
"sub_topic":[{"name":"TestSub"}]
}
那么
根据您的模式定义和给定的json,您可以按照上面的步骤获得结果
希望这能对您有所帮助。谢谢,如果我想拥有无限的子主题,这意味着客户可以发送更多的子主题。我想在文件夹系统中创建类似的东西,这样文件夹>子文件夹>子文件夹…每个子文件夹都可以有子文件夹。例如,你有MaiTopic>SubTopic>SuperSubTopic>NSuperSubTopic。在这里,NSuperSubTopic将SuperSubTopic作为其主主题,所以您将首先保存NSuperSubTopic,并在SuperSubTopic数组中传递该id。希望你们能以同样的方式理解我,副标题是超级主题的主要主题,等等…谢谢。最后用一个递归函数将它们链接到链上。谢谢你的回答,在询问之前,我试着从文档中找出答案:)没有找到一种方法将架构嵌套在自身中,以创建类似文件夹>子文件夹>子文件夹>等的内容。。。
{
"name":"A",
"sub_topic":[
{"name":"C","sub_topic":
[
{"name":"C1"}
,
{"name":"C2"}
]
}
,
{"name":"B"}
,
{"name":"D","sub_topic":
[
{"name":"D1"}
,
{"name":"D2"}
,
{"name":"D3"}
]
}
]
}
let mainTopic = new Topic();
mainTopic.name = req.body.name;
subtopicHandler(mainTopic, req.body.sub_topic);
})
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);
})
}
});