Mongoose, CastError: la valeur du cast sur le tableau a échoué lors de la tentative d’enregistrement d’un modèle contenant un modèle

J’essaie de créer le modèle pour ma firebase database mongodb en utilisant mongoose. C’est ce que j’essaie de faire:

var Class = mongoose.model('Class', {className: Ssortingng, marks: [{type: Number}], grades: [{type: Number}]}); var User = mongoose.model('User', {email: Ssortingng, classes: [Class] }); //Lets create a new user var class1 = new Class({className: 'aaa', marks: [72, 88, 63], grades: [30, 40, 30]}); var user1 = new User({email: '[email protected]', classes: [class1]}); 

Enregistrer class1 semble fonctionner correctement, mais lorsque je vérifie mongodb, il affiche: { "_id" : ObjectId("someId"), "className" : "TEST1234", "grades" : [ 30, 40, 30 ], "marks" : [ 72, 88, 63 ], "__v" : 0 }

Qu’est-ce que "__v : 0" ?

L’enregistrement de l’utilisateur n’aboutit pas du tout. C’est l’erreur suivante: ValidationError: CastError: Cast to Array failed for value "{ marks: [ 72, 88, 63 ], grades: [ 30, 40, 30 ], _id: someId, className: 'TEST1234' }" at path "classes"

Qu’est-ce que l’erreur signifie exactement? Pourquoi jette-t-il quelque chose dans un tableau? Les classes: [Class] ne devrait-il pas être un tableau de type class ?

    Homme, j’ai eu un problème similaire en créant un schéma comme celui-ci:

     QuestionnaireSchema = mongoose.Schema({ formId: Number, name: Ssortingng, questions: [ { type: Ssortingng, title: Ssortingng, alternatives:[{ label: Ssortingng, value: "Mixed" }] } ] }); 

    Mon erreur est que j’utilise “type” comme nom de champ et qu’il s’agit d’un mot réservé en mongoose.

    Je viens de changer:

      type: Ssortingng, 

    à

      formType: Ssortingng, 

    et ça marche.

    voir: https://github.com/Automattic/mongoose/issues/1760

    Essayez de changer la définition de classe pour:

     var classSchema = mongoose.Schema({className: Ssortingng, marks: [{type: Number}], grades: [{type: Number}]}); var userSchema = mongoose.Schema({email: Ssortingng, classes: [classSchema] }); var User = mongoose.model('User',userSchema); 

    Cela est nécessaire car Mangouste n’est pas capable d’parsingr l’object sans un schéma associé. Désormais, lorsque vous créez un nouveau schéma pour l’object classe interne et que vous le référez dans le fichier userSchema mongoose principal, vous devez pouvoir parsingr votre object.

    La définition explicite de la règle de type sur une propriété appelée type est autorisée et ne génère pas d’erreur. comme ça:

     type: {type: Ssortingng} 

    Votre définition de modèle est incorrecte, vous devriez corriger comme ci-dessous.

     // var Schema = mongoose.Schema; var User = mongoose.model('User',{ email: Ssortingng, classes: [ {type: Schema.Types.ObjectID, ref: 'Class'}] }); var Class1 = new Class({/*yourDataWillBeHere*/}) Class1.save(function(err, classData) { var User1 = new User({/*YourDataWillBeHere*/}) User1.classes.push(classData._id); User1.save(function(err, userData) { //make something with userData object }) }) 

    Ensuite, vous pouvez obtenir des données récupérées en utilisant avec populate() comme ceci

     User .find() .populate('classes') .exec() 

    Juste pour mise à jour

    Maintenant, Mongoose supporte les sous-documents, qui sont le moyen documenté d’imbrication de tableaux,

     var arraySchema = new Schema({ property: Ssortingng }); var objectSchema = new Schema({ arrays: [arraySchema] }); 

    Sources

    http://mongoosejs.com/docs/schematypes.html

    Par défaut, si vous avez un object avec la clé ‘type’ dans votre schéma, Mongoose l’interprétera comme une déclaration de type.

     // Mongoose interprets this as 'loc is a Ssortingng' var schema = new Schema({ loc: { type: Ssortingng, coordinates: [Number] } }); 

    Changer le typeKey:

     var schema = new Schema({ // Mongoose interpets this as 'loc is an object with 2 keys, type and coordinates' loc: { type: Ssortingng, coordinates: [Number] }, // Mongoose interprets this as 'name is a Ssortingng' name: { $type: Ssortingng } }, { typeKey: '$type' }); // A '$type' key means this object is a type declaration 

    Lien: http://mongoosejs.com/docs/guide.html#typeKey