将对象推入 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
    }]