无法将一种猫鼬模型的数据添加到另一种

时间:2018-07-12 13:44:19

标签: node.js mongodb mongoose

新手开发人员在这里。

我有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未定义。

一整天都被困在这个种子文件中。

1 个答案:

答案 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。

感谢您的帮助,如果有人知道最后一个问题的答案,请告诉我。