1

这是我的简化集合及其架构:

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)。

4

1 回答 1

1

简单模式文档

如果您有一个 Object 类型的键,则该对象的属性也将被验证,因此您必须在模式中定义所有允许的属性。如果这是不可能的,或者您不想验证对象的属性,请使用 blackbox: true 选项跳过对对象内所有内容的验证。

因此,您需要将 blackbox:true 添加到附件选项中。

Comments.schema = new SimpleSchema({
    attachments: {type: [Object], optional: true, blackbox: true},
});
于 2016-02-03T21:06:16.413 回答