将对象推入 mongoDB,["object Object"] 被保存
Pushing object into mongoDB, ["object Object"] is saved
抱歉,如果这是一个重复的问题,我真的无法用这里提供的任何信息解决它。
基本上我的 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(),因为我在不同的控制器中推送一些请求的通知,我没有单独的控制器仅用于通知的路由。 (例如:用户有一条新消息,我发送消息并推送通知)
我发现了为什么 mongoDB 总是将我的对象转换为 String
并给我一个 ["object Object"],原因很简单——永远不要使用 reserved/common对象键的词。 MongoDB 将我的 notification: {type: String, ...}
解释为一个字段,它包含一个字符串作为值而不是通知,它具有类型、已见和其他属性。我的 User.js 架构的快速修复是:
notifications: [{
notifType: String,
story: String,
seen: Boolean,
createdTime: Date,
from: {
name: String,
username: String,
id: mongoose.Schema.ObjectId
}]
抱歉,如果这是一个重复的问题,我真的无法用这里提供的任何信息解决它。
基本上我的 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(),因为我在不同的控制器中推送一些请求的通知,我没有单独的控制器仅用于通知的路由。 (例如:用户有一条新消息,我发送消息并推送通知)
我发现了为什么 mongoDB 总是将我的对象转换为 String
并给我一个 ["object Object"],原因很简单——永远不要使用 reserved/common对象键的词。 MongoDB 将我的 notification: {type: String, ...}
解释为一个字段,它包含一个字符串作为值而不是通知,它具有类型、已见和其他属性。我的 User.js 架构的快速修复是:
notifications: [{
notifType: String,
story: String,
seen: Boolean,
createdTime: Date,
from: {
name: String,
username: String,
id: mongoose.Schema.ObjectId
}]