我有以下mongoose架构:
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
);`然后错误就消失了,但是我得到了另一个错误,因为我尝试使用messages数组。
以下是模型的代码:
module.exports.Message = mongoose.model('Message', MessageSchema);
module.exports.User = mongoose.model('User', UserSchema);
module.exports.Chat = mongoose.model('Chat', ChatSchema);
答案 0 :(得分:1)
根据你在这里得到的东西,你试图向后填充。
如果每个User
都有一个Messages
数组,那么这个populate
调用就可以了。在这种情况下,它是mongoose Query
对象上的一个方法,因此它正在查找messages
集合中的文档中名为User
的属性,您正在查询以从中提取ID:由于这些不存在,你会得到一个奇怪的错误。
根据您所拥有的内容,如果您只是移除populate
来电,它看起来会有效。