[英]Mongoose nested schema
我想建立一個主題系統。 每個主題都可以具有子主題,這些子主題也是主題。 意味着子主題也可能有子主題。 例如示例圖片
我試圖創建一個主題架構並添加一個子主題字段,該字段也將引用主題架構。 我的模式代碼似乎無法正常工作:
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"}]
}
更新:使用遞歸函數完成此操作。
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);
})
如果您正在發送以下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中,您可以按照上述步驟獲取結果。
希望這會幫助你。
您可以使用子文檔來執行此操作,以查看文檔。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.