创建

时间:2017-06-21 14:40:38

标签: node.js mongoose mongoose-schema

我有动物架构:

const AnimalSchema = new mongoose.Schema({
    type: { type: String, default: "goldfish" },
    size: String,
    color: { type: String, default: "golden" },
    mass: { type: Number, default: 0.007 },
    name: { type: String, default: "Angela" }
});

动物数据阵列:

let animalData = [
    {
        type: 'mouse',
        color: 'gray',
        mass: 0.035,
        name: 'Marvin'
    },
    {
        type: 'nutria',
        color: 'brown',
        mass: 6.35,
        name: 'Gretchen'
    },
    {
        type: 'wolf',
        color: 'gray',
        mass: 45,
        name: 'Iris'
    }
];

然后我试图清空Animal模型中的所有数据,将该数组保存到数据库,记录一些动物数据并关闭连接:

Animal
    .remove({})
    .then(Animal.create(animalData))
    .then(Animal.find({}).exec())
    .then(animals => {
        animals.forEach(animal => console.log(`${animal.name} is ${animal.color} ${animal.type}`))
    })
    .then(() => {
        console.log('Saved!');
        db.close().then(() => console.log('db connection closed'));
    })
    .catch((err) => {
        console.error("Save Failed", err);
    });

但是当我试图执行此操作时,我收到了错误消息: 保存失败TypeError:animals.forEach不是一个函数     在Animal.remove.then.then.then.animals(C:_projects \ express_api \ mongoose_sandbox.js:89:12)

我的代码有什么问题以及它是如何工作的?感谢。

1 个答案:

答案 0 :(得分:1)

好的,这是一个简单的修复。 我需要编写我的.then()方法:

Animal
    .remove({})
    .then(Animal.create(animalData))
    .then(Animal.find({}).exec())

像:

Animal
    .remove({})
    .then(() => Animal.create(animalData))
    .then(() => Animal.find({}))

所以在那时方法需要传递一个回调函数。