很抱歉,如果这是重复的,我真的无法用这里提供的任何信息解决它。
基本上我在我的User.js mongoDB架构中有这个:
notifications: [{
type: String,
story: String,
seen: Boolean,
createdTime: Date,
from: {
name: String,
username: String,
id: mongoose.Schema.ObjectId
}
}]
在我查询用户之后,这就是我推送此对象的方法:
var notifObj = {
type: notification.type,
story: notification.story || ' ',
seen: false,
createdTime: new Date(),
from: {
name: notification.from.firstName + " " + notification.from.lastName,
username: notification.from.username,
id: notification.from._id
}
};
进入mongoDB数据库:
user.notifications.push(notifObj);
User.update({
_id: notification.to
}, user, function(err, data) {
if (err) {
deferred.reject({
err: err
});
}
//Tell sender everything went alrgiht
deferred.resolve(data);
});
P.S。:我有deferred.resolve
而不是res.end(),因为我在一个不同的控制器上推送一些请求的通知,我没有单独的路由只用于通知。 (例如:用户有新消息,我发送消息并发送通知)
答案 0 :(得分:3)
我发现为什么mongoDB总是将我的Object转换为String
并给我一个[“object Object”],原因很简单 - 永远不要使用保留/常用词来表示对象键。 MongoDB将我的notification: {type: String, ...}
解释为一个字段,它将String保存为值而不是通知,它具有type,seen和其他属性。我的User.js架构的快速修复是:
notifications: [{
notifType: String,
story: String,
seen: Boolean,
createdTime: Date,
from: {
name: String,
username: String,
id: mongoose.Schema.ObjectId
}]