我的用户架构包含一个notifications属性,它的值是一个对象数组(每个对象都是一个通知)
var UserSchema = new mongoose.Schema({
//a bunch of other user properties.
notifications: [{
notification: String,
directLink: String,
notificationType: Number, //0=vote, 1=comment, 2= answer, 3=post from watched user, 4=watch
onObject: { //not necessary if type (above) is 4
type: String, //post, comment, answer
id: String //id. but not as mongoose object because it is not necessary in this case.
},
date: {type: Date, default: Date.now, index: true},
newNotification: {type: Boolean, default: true}
}]
});
我的问题是当我尝试添加新通知时。当有人发布新内容,或有人回复你的评论等时,会调用一个名为newNotification的函数,并且要通知的用户将以post.author的形式作为参数传递给此函数(post是一个猫鼬对象将作者作为其属性之一,其值为用户的ObjectId,在传递给函数之前填充它。
在新通知函数内部,该对象已准备好,然后推送到user.notifications数组:
var newNot = {
notification: notification,
directLink: directLink,
notificationType: action[0],
onObject: on
}
//this code is at the end of the function, newNot now contains the data for the new notification.
//the user is passed in as "notifyUser"
console.log(">>>>>>>>"+notifyUser);
console.log(">>>>>>>>>"+notifyUser.notifications);
notifyUser.notifications.push(newNot);
console.log(">>>>>>>>>>>"+notifyUser.notifications);
console.log(">>>>>>>>>>>>>>>"+notifyUser);
notifyUser.save();
问题是通知未保存。它工作正常,它作为通知添加到用户。默认情况下设置的属性甚至可以正确添加。但它没有保存 一般方法适用于另一个用户属性,它只是一个增加的数字,所以这不是问题。但我仍然试图为用户查询数据库然后在回调中运行这些东西,但仍然没有保存更改。我花了好几个小时试图弄清楚为什么它没有被妥善保存,但绝对没有。
注意:不,制作通知架构不是更好,在这种特定情况下,它是不必要的。
答案 0 :(得分:0)
我发现了问题,由于我在架构中犯了一个错误,用户的更改未被保存,我心不在焉地使用了“#34; type"作为onObject对象的一个键。在这里:
onObject: {
type: String, //post, comment, answer
id: String //id. but not as mongoose object because it is not necessary in this case.
}
这让mongoose认为onObject是一个字符串。事实上,我的意思是它是一个对象。将密钥类型重命名为其他东西可以解决问题。
onObject: { //not necessary if type (above) is 4
objectType: String, //post, comment, answer
id: String //id. but not as mongoose object because it is not necessary in this case.
},
之前我无法找到问题,因为我没有发现错误,我更换了:
notifyUser.save();
失败了,但是:
notifyUser.save(function(err){
if (err){
console.log(err);
}
});
(使用findByIdAndUpdate也无声地失败,而使用update和$ push发出了不明确的错误消息)。
我没有删除这个问题,因为如果有人遇到类似的问题,这可能会有所帮助