使用MongoDB语法和SimpleSchema验证将对象推入数组

时间:2015-06-25 21:33:37

标签: javascript mongodb meteor

我们的想法是将一个看起来像这样的对象推送到一个名为likes的字段中,这是一个数组:

{
  movieId: "VgtyvjVUAjf8ya",
  information: {
                 genre: "Action",
                 length: "160",
                 language: "English"
               }
}

我以为会这样做:

Meteor.users.update({_id: Meteor.userId()}, {$push: {likes: {movieId: movieId, information: informationObj}}})

但要么是错误的,要么SimpleSchema的验证有一些问题(尽管它并没有抱怨),因为我得到的只是一个数组中的空对象!不,这些价值观本身并没有错,我已经检查过了。

相关字段的SimpleSchema如下所示:

likes: {
            type: [Object],
            optional: true
        }

我已经尝试过阅读文档,但我并不真正理解错误。有人知道吗?

1 个答案:

答案 0 :(得分:7)

如果您不想验证被推入likes属性的对象,可以在架构中将blackbox设置为true,如下所示:

likes: {
    type: [Object],
    optional: true,
    blackbox: true
}

这将允许您将任何想要的东西放入“喜欢”的对象中。

如果你想验证“喜欢”的对象,那么你需要创建一些额外的模式,如下所示:

var likeInfoSchema = new SimpleSchema({
    genre: {
        type: String
    },
    length: {
        type: String
    },
    language: {
        type: String
    }
});

var likeSchema = new SimpleSchema({
    movieId: {
        type: String
    },
    information: {
        type: likeInfoSchema
    }
});

Meteor.users.attachSchema(new SimpleSchema({
    // ...
    likes: {
        type: [likeSchema]
    }
}));