【问题标题】:Mongoose : "Invalid schema configuration : 'model' is not a valid type within the array"Mongoose:“无效的架构配置:‘模型’不是数组中的有效类型”
【发布时间】:2021-07-23 12:29:39
【问题描述】:

我第一次将 mongoose 用于 node.js 和 MongoDB。我已经尝试按照文档进行操作,但似乎我做错了什么。

我正在尝试在名为 Post 的集群(是数据库吗?)中创建三个集合(Tweet、Comments 和 Messages)。遵循这些模型的是一堆 HTTP 方法,由于我收到的错误,我还没有尝试过。

错误是

架构配置无效:“模型”不是数组中的有效类型

它位于需要以下模型的行:

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

我看到其他问题有相同的错误,但提供的修复不够通用,因为这个错误一定很常见并且很容易得到。

这是我的代码:

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)

我为法语的 cmets 道歉,我不是以英语为母语的人,这让我更难理解文档。这些 cmets 的存在只是为了提醒自己哪个值代表什么,所以请忽略它。

感谢您抽出宝贵时间。祝你有美好的一天。

【问题讨论】:

    标签: javascript node.js mongodb mongoose


    【解决方案1】:

    @Someone Special 的答案很接近,但您需要传入 Schema,而不是 Model。

    改变

    comms: [Commentaries]
    

    comms: [commSchema]
    

    【讨论】:

    • 谢谢!它现在正在工作!我很难理解模式和模型之间的区别,所以这就是我所缺乏的。感谢您的宝贵时间。
    • 将 Schema 视为对如何存储数据的描述,将 Model 视为可以存储数据的实际容器。祝你的编码之旅好运!
    • 谢谢。我也有同样的问题。我没有解析模式,而是传递了类(使用模式装饰器创建)。
    【解决方案2】:

    我假设您正在尝试创建子文档类型,您可以更改下面注释的行吗?

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

    【讨论】:

    • 感谢您的回答。我已经更正了,但我仍然在“tweetSchema.add(”行。
    • 另一个错误是const tweetSchema = Schema();,您忘记在架构前添加new
    • 我确实做到了!谢谢!
    猜你喜欢
    • 1970-01-01
    • 2020-03-26
    • 2019-08-16
    • 1970-01-01
    • 2021-03-24
    • 2019-10-14
    • 2022-01-04
    • 2016-07-13
    • 1970-01-01
    相关资源
    最近更新 更多