ObjectId数组将不会在没有错误的情况下填充
Array of ObjectIds will not populate without error
我有以下猫鼬模式:
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
调用,它看起来会起作用。
相关文章:
- 有没有一种方法可以在控制台关闭的情况下让console.log()在IE中记录消息
- 如何解决这种情况下的非法调用类型错误
- 如何在有延迟的情况下对两个代码进行积分
- 有没有一种方法可以在没有文档或jQuery的情况下使用javascript解码html实体
- 如何在不创建格式错误的HTML标记的情况下分解字符串
- 为什么jQuery代码段在没有IFrame的情况下可以工作,而在有IFrame时却不能工作
- 如何检查html5视频是否有足够的缓冲,以便在不停止缓冲的情况下播放
- 有没有任何情况下,一个方法不应该是原型方法
- JavaScript while循环没有'不能在有条件的情况下工作
- 类型胁迫在有条件的情况下更危险吗?
- 有没有办法在没有真正的点击事件的情况下使用 onclick
- 在这种情况下,我应该如何在余烬中放置我的模型有很多关系
- 未捕获错误:在未加载模板编译器的情况下,无法调用“compile”.请在调用“compile”之前加载“ember te
- 有没有一种方法可以在没有谷歌云控制台的情况下使用带有JavaScript的谷歌硬盘
- 在没有F12工具的情况下恢复Internet Explorer上的javascript日志和错误
- 在这种情况下,有什么方法可以向`.call()`发送更多的参数吗
- 有没有一种方法可以在没有jQuery的情况下获得JavaScript中当前添加到后台的事件列表
- 按钮(禁用=错误)条件;在某些情况下有效,而在其他情况下无效
- 有没有一种方法可以在没有视口元标记的情况下获得硬件像素中的真实视口大小
- 是否有任何情况下,我必须使用.attr()超过.prop()