新手开发人员在这里。
我有2种模式:
var categorySchema = new mongoose.Schema({
name: String
});
var subCategorySchema = new mongoose.Schema({
name: String,
parent: {
name: String,
id: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Parent'
}
}
});
我正在制作种子文件以进行测试。 我首先创建所有类别:
async function addCats() {
try {
for (const category of categories){
await Category.create({name:category});
console.log("Created Category: " + category)
}
}
catch(err) {
console.log(err);
}
}
我遇到的问题是随后创建子类别,所有类别均已正确创建。
但是如果我运行:
async function addSubs(){
try {
for(const sub of sub_categories) {
let foundParent = await Category.find({name: sub.parent});
console.log('Parent: ' + foundParent);
let createdSub = await SubCategory.create({name:sub.name, parent: foundParent});
await console.log("Created sub-category: " + createdSub.name + " with parent: " + createdSub.parent + " parents ID is: " + createdSub.parent.id)
}
}
catch(err) {
console.log(err);
}
}
我明白了
Parent: { _id: 5b474611e6eb361cd5d051cc, name: 'Men\'s', __v: 0 }
Created sub-category: Shirts with parent: {} parents ID is: undefined
它找到了正确的父级,但是即使那样,它似乎也没有按照预期的那样放入子类别,我也不知道为什么。
我也尝试这样做:
let createdSub = await SubCategory.create({name:sub.name, parent:{ name: foundParent.name, id: foundParent._id}});
但是我得到了
Created sub-category: Shirts with parent: {} parents ID is: undefined
parent在子类别和IDK中仍然是一个空对象,为什么id未定义。
一整天都被困在这个种子文件中。
答案 0 :(得分:0)
弄清楚了,我记得曾经学习过x.find返回一个数组,所以我认为是从Category.find请求返回的foundParent变量在数组中,我使用了Category.findOne然后可以访问变量,这是我的代码:
for(const sub of sub_categories) {
var foundParent = await Category.findOne({name: sub.parent});
let newSub = {name:sub.name, parent: {name:foundParent.name, id: foundParent._id}};
let createdSub = await SubCategory.create(newSub);
很难发现,因为父变量是一个对象,所以当您打印输出时:
console.log(foundParent);
得到:
{ _id: 5b477ec9818a58240da721e5, name: 'Children\'s', __v: 0 }
它好像不在数组中。
我想您也可以从数组中取出它,然后访问它,但是我不确定该怎么做。
如果我尝试这样做,那么即使使用findOne并在数组/可访问的外部获取findParent,我仍然会遇到的一个问题:
let newSub = {name:sub.name, parent: foundParent};
然后,还将newSub.parent打印为空对象{},并且未定义newSub.parent.id或.name。
感谢您的帮助,如果有人知道最后一个问题的答案,请告诉我。