MongoDB / Mongoose没有保存嵌套属性

时间:2014-09-15 19:21:47

标签: mongodb coffeescript mongoose

所以我觉得我做的事情很愚蠢,因为我不能为我的生活让下面的架构正常工作:

UserSchema = new mongoose.Schema 
  notifications:
    discussion:
        created:
            mobile: 
                stuff: 
                    hey: 
                        type: Boolean
                        default: false
            osx:  
                type: Boolean
                default: false
            web:  
                type: Boolean
                default: true
            email:  
                type: Boolean
                default: true
            sms:  
                type: Boolean
                default: false

一切看起来都很正常,对吗?只是声明一些嵌套属性,它们的类型和它们的默认值?不。

Information.db.User.find {}, "notifications userSettings", (err, users) ->
    for user in users
        console.log user.notifications.discussion.created
            // prints { mobile: { stuff: {} } }

所有默认值都消失了,我要存储的实际数据不在哪里。任何想法???

编辑以包含用于检索用户的代码。 Information.db.User是对Mongoose Schema的引用,跳过我的缓存层。用户已存在于db中,我正在尝试添加通知对象,而不是将这些设置存储为字符串化JSON。

1 个答案:

答案 0 :(得分:0)

我非常确定您在添加默认值之前创建了数据库中的旧用户对象,或者他们是从另一个项目中遗留下来的。

当我在我的测试项目中实现您的代码时,我使用了一个旧数据库,该数据库中已有现有用户,并获得与您相同的输出。我想mongoose试图强制这些用户对象上的模式,但它只会输出嵌套字段而不输出任何布尔字段,因为它们是空的。

当我使用您的架构创建一个新对象时,它运行正常,我得到了所有默认值。如果这也可能是你的问题,请告诉我。