将对象推入mongoDB,保存[“对象对象”]

时间:2015-02-18 10:36:16

标签: javascript node.js mongodb object

很抱歉,如果这是重复的,我真的无法用这里提供的任何信息解决它。

基本上我在我的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(),因为我在一个不同的控制器上推送一些请求的通知,我没有单独的路由只用于通知。 (例如:用户有新消息,我发送消息并发送通知)

1 个答案:

答案 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
    }]