所以我试图创建一个作为项目的mongoose模式。该项目下方可能包含子项目。例如:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var ItemSchema = new Schema({
description: { en_US: String },
title: { en_US: String },
subtitle: { en_US: String },
type: String,
value: Schema.Types.Mixed,
items: [{type: Schema.Types.Object, ref: 'ItemSchema'}]
});
module.exports = mongoose.model('Item', ItemSchema);
当我调用代码并传递看起来像这样的项目对象json时:
"items": [{
"type": "photo",
"title": {
"en_US": "Add Photo"
}
},
{
"required": true,
"type": "list",
"title": {
"en_US": "Select Type of Call"
},
"items": [{
"type": "list_option",
"title": {
"en_US": "Homework Help"
}
},
{
"type": "list_option",
"title": {
"en_US": "Not Available"
}
}
]
}]
照片和列表项目得到_id而不是其他项目......结果如下:
"items": [
{
"type": "photo",
"_id": "5a1d99f5ceec230014b83d81",
"items": [],
"title": {
"en_US": "Add Photo"
}
},
{
"type": "list",
"_id": "5a1d99f5ceec230014b83d80",
"items": [
{
"title": {
"en_US": "Homework Help"
},
"type": "list_option"
},
{
"title": {
"en_US": "Not Available"
},
"type": "list_option"
}
]
}]
我永远不会知道会有多少子项目,或者它可以达到10个级别的子项目(例如car-ford-compact-escort(每个不同的子级别))。如何获取项目为其拥有的所有子项创建_ids?
感谢您的帮助。
答案 0 :(得分:0)
好的,我找到了解决方法。因此,首先,数据作为单个对象进入函数,其中包含多个项目。我要做的就是编写一个函数,用一个包含_id的mongoose模式创建循环操作。以下是mongoose模式的外观:
var ItemSchema = new Schema({
_id: Schema.Types.ObjectId,
description: { en_US: String },
title: { en_US: String },
type: String,
value: Schema.Types.Mixed,
items: [{type: Schema.Types.Object, ref: 'ItemSchema'}]
});
现在,当我保存数据时,我无法立即保存整个项目对象。相反,我需要走过这些项目并将每个项目分开保存,如下所示:
function nextItem(item){
var saveItem = Item({
_id: new mongoose.Types.ObjectId,
description: item.description,
title: item.title,
type: item.type,
value: item.value
});
var fullItem = saveItem;
if(item.items){
fullItem.items = [];
item.items.forEach(function(item){
var tempItem = newItem(item);
fullItem.items.push(tempItem);
});
return fullItem
} else {
return fullItem
}
}
这会创建正确的Items对象,并且_ids是唯一的,所以我可以稍后搜索它们。它甚至允许我对其他对象中的items数组执行相同的操作,并使用正确的项_ids保存父对象。我希望这也可以帮助别人。