【问题标题】:Array of ObjectIds will not populate without errorObjectIds 数组不会无错误地填充
【发布时间】:2013-11-23 11:25:55
【问题描述】:

我有以下猫鼬模式:

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

【问题讨论】:

    标签: javascript node.js mongoose


    【解决方案1】:

    根据您在此处获得的信息,您正在尝试向后填充。

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

    根据您在此处获得的信息,如果您删除 populate 调用,它似乎会起作用。

    【讨论】:

      猜你喜欢
      • 2020-05-18
      • 1970-01-01
      • 2019-12-05
      • 1970-01-01
      • 1970-01-01
      • 2021-03-12
      • 2020-07-20
      • 1970-01-01
      • 2013-11-25
      相关资源
      最近更新 更多