2017-06-21 2 views
2

J'ai un schéma animal:méthode Mongoose trouver après la création

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" } 
}); 

tableau de données animales:

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' 
    } 
]; 

Je suis en train de vider toutes les données dans un modèle animal, sauf ce tableau la base de données, connectez-vous des données animales et fermer la connexion:

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); 
    }); 

Mais quand je suis en train d'exécuter ce que je reçois une erreur: Échec de l'enregistrement TypeError: animals.forEach est pas une fonction à Animal.remove.then.then.then.animals (C: _Projets \ express_api \ mongoose_sandbox.js: 89: 12)

Quel est le problème avec mon code et comment le faire fonctionner? Merci.

Répondre

2

OK, c'était une solution facile. Il est besoin d'écrire mes méthodes .alors():

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

Comme:

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

Donc, alors des méthodes était nécessaire de passer une fonction de rappel.