Collection2删除对象属性

时间:2016-02-03 20:02:06

标签: meteor meteor-collection2 simple-schema

这是我的简化收藏品&它的架构:

Comments = new Mongo.Collection('comments');

Comments.schema = new SimpleSchema({
    attachments: {type: [Object], optional: true},
});

Comments.attachSchema(Comments.schema);

这是我的简化方法:

Meteor.methods({
    postComment() {         
        Comments.insert({
            attachments: [{type:'image', value:'a'}, {type: 'image', value:'b'}]
        });
    }
});

在调用方法之后,这是我在MongoDB中获得的文档:

{
    "_id" : "768SmgaKeoi5KfyPy",
    "attachments" : [ 
        {}, 
        {}
    ]
}

数组中的对象没有任何属性! 现在,如果我评论这一行:

Comments.attachSchema(Comments.schema);

再次调用该方法,插入的文档现在看起来是正确的:

{
    "_id" : "FXHzTGtkPDYtREDG2",
    "attachments" : [ 
        {
            "type" : "image",
            "value" : "a"
        }, 
        {
            "type" : "image",
            "value" : "b"
        }
    ]
}

我必须遗漏一些基本的东西。请赐教。 我使用的是最新版本的Meteor(1.2.1)。

1 个答案:

答案 0 :(得分:1)

来自simple-schema docs

  

如果您有一个Object类型的键,那么该对象的属性也将被验证,因此您必须在架构中定义所有允许的属性。如果无法做到这一点,或者您不关心验证对象的属性,请使用blackbox:true选项跳过对象内所有内容的验证。

因此,您要添加blackbox:true为您的附件'选项。

Comments.schema = new SimpleSchema({
    attachments: {type: [Object], optional: true, blackbox: true},
});