ObjectId数组将不会在没有错误的情况下填充

Array of ObjectIds will not populate without error

本文关键字:有错误 情况下 填充 数组 ObjectId      更新时间:2023-09-26

我有以下猫鼬模式:

var ChatSchema = new Schema({
    pin: String,
    users: [{type: mongoose.Schema.Types.ObjectId, ref: "User"}],
    messages: [{type: mongoose.Schema.Types.ObjectId, ref: 'Message'}], //<----
    active: Boolean,
});
var MessageSchema  = new Schema({
        sent: Date,
        user: {type: mongoose.Schema.Types.ObjectId, ref: 'User'},
        content: String
});
var UserSchema = new Schema({
    name: String,
    pin: String,
    id: String
});

此功能是为ChatSchema:定义的

ChatSchema.methods.addMessageForUser = function(message, userid, userpin ) {
    chat = this;
        module.exports.User.findOne({id: userid, pin: userpin}).populate('messages').exec(function(err, user) {
             message = {
                user: user,
                time: new Date(),
                message: message,
            };
            chat.messages.push(message);
            chat.save();
        });
};

当我运行它时,我会得到以下错误:

CastError: Cast to ObjectId failed for value "[object Object]" at path "messages"

如果我删除populate('messages);`然后错误消失了,但我又遇到了另一个错误,因为我试图使用消息数组。

以下是型号的代码:

module.exports.Message = mongoose.model('Message', MessageSchema);
module.exports.User = mongoose.model('User', UserSchema);
module.exports.Chat = mongoose.model('Chat', ChatSchema);

基于这里的内容,您正在尝试向后填充。

如果每个User都有一个Messages的数组,那么这个populate调用就会起作用。在这种情况下,它是mongoose Query对象上的一个方法,因此它在您要查询的User集合中的文档上寻找一个名为messages的属性,以从中提取ID——因为这些属性不存在,所以会出现一个奇怪的错误。

根据您在这里得到的内容,如果您只删除populate调用,它看起来会起作用。

相关文章: