简体   繁体   中英

Mongoose : "Invalid schema configuration : 'model' is not a valid type within the array"

I'm using mongoose for node.js and MongoDB for the first time ever. I've tried following the documentation but it seems I have misdone something.

I am trying to create three collections (Tweet, Comments and Messages) within a cluster (is that a database?) called Post. Following those models are a bunch of HTTP methods that I have yet to try out because of the error I receive.

The error is

Invalid schema configuration: 'model' is not a valid type within the array

It's located on the lines that call for a model like:

const Commentaire = mongoose.model("Commentaire", commSchema)

I've seen other questions with the same error but the fixes provided are not general enough, as this error must be quite common and easy to get.

Here is my code:

const express = require("express");
const mongoose = require('mongoose');

mongoose.connect('mongodb://localhost:27017/Posts', {useNewUrlParser: true, useUnifiedTopology: true});

db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
    console.log("connecté à Mongoose")
});

Schema = mongoose.Schema
//Commentaires sous les tweets
const commSchema = new Schema();
commSchema.add({
    id_comm:{ //id unique qui permet de référer le comm
        type: Number,
        required: true,    
    },             
    login:{ //le login de la personne qui envoie le comm
        type: String,
        required: true, 
    },
    id_tweet:{ //l'id unique du tweet sous lequel le commentaire va
        type: Number,
        required: true,
    },
    comm:{ //commentaire en question, sous forme de chaîne de caractère
        type: String,
        required: true,
    },
    date:{ //date de l'envoie du message
        type: String,
        required: true,
    }                   
})
const Commentaire = mongoose.model("Commentaire", commSchema)
//Tweets
const tweetSchema = Schema();
tweetSchema.add({
    id_tweet:{ //id unique qui permet de référer le message
        type: Number,
        required: true,    
    },             
    user_id:{ //le login de la personne qui envoie le message
        type: String,
        required: true, 
    },
    tweet:{ //tweet en question, sous forme de chaîne de caractère
        type: String,
        required: true,
    },
    titre:{ //titre du tweet, sous forme de chaîne de caractère
        type: String,
        required: true,
    },
    date:{ //date de l'envoie du message
        type: String,
        required: true,
    },
    comms: { type: [Commentaire] }                
})
const Tweet = mongoose.model("Tweet", tweetSchema)
//Messages privés
const messageSchema = new mongoose.Schema({
    id_mess:{ //id unique qui permet de référer le message
        type: Number,
        required: true,    
    },             
    sender_id:{ //l'id de la personne qui envoie le message
        type: Number,
        required: true, 
    },
    ami_id:{ //l'id' de la personne qui reçoit le message
        type: Number,
        required: true,
    },
    message:{ //message en question, sous forme de chaîne de caractère
        type: String,
        required: true,
    },
    date:{ //date de l'envoie du message
        type: String,
        required: true,
    }                   
})
const Message = mongoose.model("Message", messageSchema)

I apologize for the comments in French, I'm not a native English speaker which makes understanding the documentation a bit harder for me. Those comments only exist to remind myself of which value represents what so please disregard that.

I thank you for your time. Have a good day.

The answer by @Someone Special is close, but you need to pass the Schema in, not the Model.

Change

comms: [Commentaries]

To

comms: [commSchema]

I assume you are trying to create sub document type, can u change the line commented below?

tweetSchema.add({
    id_tweet:{ //id unique qui permet de référer le message
        type: Number,
        required: true,    
    },             
    user_id:{ //le login de la personne qui envoie le message
        type: String,
        required: true, 
    },
    tweet:{ //tweet en question, sous forme de chaîne de caractère
        type: String,
        required: true,
    },
    titre:{ //titre du tweet, sous forme de chaîne de caractère
        type: String,
        required: true,
    },
    date:{ //date de l'envoie du message
        type: String,
        required: true,
    },
    comms: { type: [Commentaire] } //<-- try this line                 
})

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM